今天寫**用到了字串,需要利用字串結尾符'\0'判斷是否遍歷完畢,然後產生了相應的困惑
1.字串陣列是否都具有結尾符?
2.二維字串陣列每一行是否等同於一維字串陣列?
首先說結論:c語言字串陣列都具有結尾符'\0';二位字串陣列每一行等同於一維字串陣列;
執行一下測試**:
#include using namespace std;
int main() ; //等同於 char str1 = "123";
char str2[3] = ; //人工新增結尾符
char str3[3] = ; //不規範
char str3_2[3] = ;
// char str4[3] = ; //宣告錯誤,檢測到陣列空間不足
printf("輸出str1:");
for (i = 0; str1[i]; i++)
printf("%c", str1[i]);
printf("\nstr1結尾符的位置: %d", i);
printf("\n");
printf("輸出str2:");
for (i = 0; str2[i]; i++)
printf("%c", str2[i]);
printf("\nstr2結尾符的位置: %d", i);
printf("\n");
printf("輸出str3:");
for (i = 0; str3[i]; i++)
printf("%c", str3[i]);
printf("\nstr3結尾符的位置: %d", i);
printf("\n");
printf("輸出str3_2:");
for (i = 0; str3_2[i]; i++)
printf("%c", str3_2[i]);
printf("\nstr3_2結尾符的位置: %d", i);
return 0;
}
執行結果:
分析:列舉出可能的賦值形式 ,並最終判斷結尾符'\0'來結束輸出。由於每次都能輸出'\0'的位置數值,可以確定字串陣列結束符一定存在。但如果以不規範的形式賦值,即如同上述str3的形式,結束符空間將不能確定,可能用到了別的 變數的空間。如果單獨以不規範的形式測試,則結果會是結束符位置的值為陣列空間大小加1(原因暫時未找到),如下圖:
#include using namespace std;
int main() ; //不規範
C語言字串 字串排序
本題要求編寫程式,讀入5個字串,按由小到大的順序輸出。輸入為由空格分隔的5個非空字串,每個字串不包括空格 製表符 換行符等空白字元,長度小於80。按照以下格式輸出排序後的結果 after sorted 每行乙個字串 red yellow blue green white after sorted b...
C語言 字串
char str lnj 字串變數 l n j 0 printf str size lu n sizeof str 字元陣列 這個並不是字串,而是字元陣列 char charvalues 如何輸出字串變數,s str 陣列的名稱,陣列的名稱就是陣列的位址 s的原理,從傳入的 位址 開始逐個取出,直到...
c語言字串
字串 字串1 概念 1.1 定義 1.1.1 用雙引號引起來的多個字元 1.2 兩個連續的雙引號中間是空格或回車,則兩個字串自動連在一起 1.3 遇見 0字串結束,0可以提前終止字串 1.4 初始化 1.4.1 char str 6 1.4.2 char str hello 編譯時自動給 加6 1....