-
str 只是指向字串初始字元的位址,當您輸入超過 2 個字元時,系統會將已經占用的空間分配給它,如果占用的儲存空間不儲存重要資訊,也不會出現問題。
如果要輸入無限的字串,可以將上限設定為更大的限制,也可以使用動態分配儲存空間的方法。
int limit;
char * str;
str=(char *)malloc((limit+1)*sizeof(char));
有乙個 0 字元*
scanf("%s",str);
printf("%s",str);
-
字元末尾符號也占用 1 個位元組。 '\0' zhan yi ge byte.
-
如果想要不受限制,可能要一次輸入乙個字元,這樣比較實用,就是輸入乙個字元,就會被評判一次。
-
它沒有限制,但超出限制是危險的。
例如,char* s="abcde"這相當於系統為您分配了 6 個位元組的空間。
和 char s[6], char* s=(char *)malloc(6*sizeof(6))。
據說這些方法在 6 個位元組內都是安全的。
輸入字串必須受到限制,只需將上限設定得更大即可。
-
malloc(n);
malloc 函式分配指定長度的記憶體塊,如果分配成功,則返回指向已分配記憶體的第乙個位址的指標,否則返回空指標。
呼叫此函式時,系統會自動查詢可用的連續記憶體,並確保返回的指標位址在 n 位元組後是空閒的。 但是 n 位元組之後的記憶體也可能是空閒的。 這時越界是安全的,如果不閒著,程式可能會報錯或其他錯誤,這取決於編譯的軟體,不同的編譯軟體有不同的結果。
輸入字串時,請將 n 設定為較大的大小,如果不想有限制,一次只能輸入乙個字元。
-
指標陣列和陣列指標是兩個不同的概念,你在這裡給出的定義例項實際上是指標陣列的定義。
指標陣列意味著所定義陣列的每個元素都是對應資料型別的指標,可以使用迴圈語句進行開啟空格的操作,例如:for char *p[10]; 是的。
for(i=0;i<10;i++)
p[i]=(char *)malloc(sizeof(char)*n);為每個指標請求 n 個字元的儲存空間。
開啟後,p的使用類似於二維陣列的格式,可以有效使用兩個下標,如p[0][0]='a';
你也可以分配乙個字串,如 p[2]="beijing";當然,字串長度應小於 n。
另一方面,陣列指標是定義為指向固定大小的順序空間的指標,格式如下:
char (*pa)[10];定義乙個指向具有 10 個元素的字元陣列的指標,int (*p)[10];
應用格式可以參考以下步驟,在申請空格、賦值、輸出後,可以觀察到100賦值到第五行的第十個元素,指標可以像二維陣列一樣通過兩個下標來指代請求的空間。
#include
main()}
如果它是乙個靜態陣列,例如 char a[10],那麼它會開啟乙個 10 個字元大小的連續空間,你可以合法地填充從 a[0] 到 a[9] 的 10 個空格,每個空間大小都是 char。 如果是動態陣列,如果使用 realloc,則 realloc 原型為 extern void *realloc(void *mem address, unsigned int newsize); >>>More