这是我的代码的一部分。我将我的文本文件的一些行放入array1,我选择了数字28,但它必须是我存储的每行的不同数量。我需要为每一行的实际长度分配空间,我不知道如何找到每个字符串的长度,因为sizeof(str)总是给我100个。
while (fgets(str, sizeof(char)*100, fp) != NULL) {
array1[j] = (char *)malloc(sizeof(char)*28);
strcpy(array1[j], str);
j++;
//其余代码 }
答案 0 :(得分:1)
为字符串的实际长度分配足够的空间
(char *)
中不需要演员(char *)malloc(sizeof(char)*28);
使用strlen(str)
@M Oehm找到长度。此长度不包括'\0'
通过在长度上加1来找到所需的尺寸
为字符串 size 分配,而不是 length
最好使用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]
。