如何使用函数动态分配字符串?

时间:2015-08-22 19:17:10

标签: c string function pointers dynamic

我试图通过从用户接受它来分配动态字符串。我想用一个函数来做。我正在尝试实现以下代码,但它无法正常工作。

\0

2 个答案:

答案 0 :(得分:3)

许多问题:

  1. 内存大小太小了。

  2. while(c!='\n')首先测试c,即使它未初始化。

  3. string()应该传递char *的地址,如string(char **)

  4. 使用size_t时,最好使用int而不是strlen()

  5. 次要:

    1. 未检测到EOF。使用int c而不是char c来帮助检测。

    2. 每个循环realloc()当然效率低下。

    3. 投放malloc()/realloc()不必要。

    4. 检查是否有内存不足。

    5. 使用int main(void)而不是int main()来实现可移植性。

      size_t string(char **str) {
        assert(str);
        int c; 
        size_t i = 0;
        size_t size = 0;
        *str = NULL;
      
        printf("Enter String : ");
        while((c = getc(stdin)) !='\n' && c != EOF) {
          if (i == size) {
            size *= 2 + 1;         // double the size each time
            *str = realloc(*str, size);
            assert(*str);
          }
          (*str)[i] = c;           // store read character by making pointer point to c
          i++;
        }
        *str = realloc(*str, i+1); // right-size the string
        assert(*str);
        (*str)[i] = '\0';          // at the end append null character to mark end 
        printf("\nThe entered string is : %s",*str);
        return i;    
      }
      

答案 1 :(得分:1)

您需要将引用传递给指针(int string(char **str)),因为您正在更改函数内str的值。

main中,您应该致电string(&str)