为字符串的实际长度分配足够的空间

时间:2017-09-24 17:51:43

标签: c

这是我的代码的一部分。我将我的文本文件的一些行放入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++;

//其余代码 }

1 个答案:

答案 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]