關於str字元陣列問題

時間 2022-04-30 13:35:02

1樓:匿名使用者

c++的字串可沒那麼方便簡單,事實上c++陣列和指標是最難的,而且兩者之間關係密切,特別是char陣列,字串就是利用char陣列儲存的,

"abc123"這種寫法,編譯器會幫你在常量區定義一個char陣列,並取首地址。

因此應該是 char *p="abc123";

或者 char str="abc123";

或者 char str[10]="abc123";

str和*p是等效的。所謂等效,不等於完全相同,畢竟str按陣列看待,str本身不佔用空間,只是個陣列名,一個標示符號而已,只在源**中有意義,編譯完了機器碼中直接使用地址(類似引用),可以將str看做一個系統內建的const char *,即常量指標,而str和str[10]的區別在陣列長度取值,前者自動匹配,後者預先設定長度,長度不夠無法編譯;而p是個變數,是變數都需要佔用4位元組空間(32位定址),裡面儲存字串地址,在機器碼中也存在。

訪問陣列元素時看起來都一樣,但是實際上有差異的

char c;

c=str[1];//直接訪問,即取字串首地址,首地址+1,讀字元。(str指代的就是字串首地址)

c=p[1];//間接訪問,先讀取p的地址,讀取p中儲存的4位元組(字串首地址),首地址+1,讀字元。

指標還可以運算,並且可以用另一種寫法訪問字元,

p++;//使指標指向下一個字元,此例中就是元素1,即第二個元素

c=*p;

str作為陣列名不可以這麼操作。

2樓:匿名使用者

因為str1定義的空間太小,輸入的目的字串已經造成了陣列的越界:儲存到str1中資料過長,已改寫陣列儲存空間的後續空間所儲存的資料。雖然你的程式很簡單,使用的記憶體很小,有時系統未報錯,但越界操作很可能會引起程式、系統崩潰,建議str1定義一個較大的空間,避免此類危險。

請採納答案,支援我一下。

3樓:匿名使用者

陣列其實相當於一個const指標,只能修改它指向的變數的值,不能修改指標本身的值(即不能再指向其他地址),不同於const指標的地方在於,const指標必須賦初始值,而定義陣列的時候不需要顯示的賦初值(其實這是編譯器自動幫你申請好初值了)

請用這樣的語句char str[10]="abc123";或者char str="abc123";

4樓:匿名使用者

char不支援=賦值,char字元賦值一般呼叫strcpy, 下面提供其中幾種賦值操作。

strcpy(str, "abc123");

memcpy(str, "abc123", 6);

sprintf(str, "%s", "abc123");

c語言新手求問關於輸出字串陣列的問題?

5樓:

定義陣列char str[100];

陣列名str代表陣列中第一個元素的地址

也就是str[0],

而字串是以'\0'字元結尾的(二進位制碼= 0)printf ("%s", str);

printf()函式從str(記憶體地址)開始輸出字元(也就是str[0] 地址

後的內容,遇到'\0'就停止輸出

c語言問題關於字元陣列的長度問題

哎。strlen 是在string.h裡面的,getch 是在conio.h裡面的,不過,我用的是cfree,至於其它的編譯器,我就不知道了。至於你的問題,當你仔細看看他們的結果,你就會有結論了。很明顯,strlen q 的值是一樣的,不同的是p的字元長度 而它們的區別,就在於,它們一個有陣列的長度...

C語言字元陣列與字串問題,C語言中將字串賦值給字元陣列的問題

渿河 這是在定義時初始化 如果你的右邊花括號內的字元個數少於 陣列元素個數 那麼其餘的陣列元素將會初始化為0 0 的ascii碼的值就是0 如果你不指定陣列元素個數 編譯器會自動幫你計算出元素個數的 char c 10 這個是已經給定了陣列的大小,達不到陣列大小的長度的話會自動添零的 c語言中將字串...

C語言關於字串陣列取地址的問題。到底要不要呢

格式 s 輸入字串到字元陣列不需要加取址符 你說對了啊。對一個字串指標來說,在scanf函式中 要 與 不要 都能得到正確結果,你可以放心使用。如果你用了 發現有問題,那就趕快告訴我,讓我也長進一下。原因是這樣的 scanf把變數列表中的 解釋為單純的取地址,都轉化成了指向字串首字元的指標。如果有c...