分配的字符串
演員在(char *)malloc(sizeof(char)*28);
不需要(char *)
的實際長度足夠的空間。
使用strlen(str)
@M Oehm查找長度。此長度不包括'\0'
。
找到大小需要加1到長度。
分配爲字符串大小,而不是長度。
最好使用size_t
進行字符串長度/大小計算。 int
可能不足。
的問題是這樣寫一個字符串複製功能。研究通用的strdup()
函數。
char *s96_strdup(const char *s) {
size_t length = strlen(s); // Get the string length = does not include the \0
size_t size = length + 1;
char *new_string = malloc(size);
// Was this succesful?
if (new_string) {
memcpy(new_string, s, size); // copy
}
return new_string;
}
用法。 fgets()
讀取行,其通常包括'\n'
。
char str[100];
while (j < JMAX && fgets(str, sizeof str, fp) != NULL) {
array1[j] = s96_strdup(str);
j++;
}
記住最終會爲每個分配的字符串調用free(array1[j]
。
你想'''strlen',但不要忘記添加一個空終止符。 –
你可以使用'stdlib.h'的'strlen()'函數 – krpra
另外,請把sizeof(char)* 100'改爲'sizeof(str)'。假設'str'是一個數組,而不是傳遞給函數的指針(或數組)。這是發佈不完整代碼的麻煩。 –