C动态字符数组

Nic*_*cco 0 c

用户在函数中输入字符串后动态扩展数组dynamic_array我的问题似乎是当我在main dynamic_array返回true 后尝试在main中使用扩展数组agian时.

函数调用后,我尝试打印inputprintf("main string: %s\n", input)程序会崩溃.这似乎是*inputmain永远不会被延长.

int dynamic_array(char *input, int *string_current_len){
  int string_len = 0;
  char temp_c;

  input = (char *) malloc(sizeof(char));

  if(input == NULL) {
    printf("Could not allocate memory!");
    exit(1);
  }  

  printf("File to search in: ");

  while((temp_c = getchar()) != '\n') {
    realloc(input, (sizeof(char)));
    input[string_len++] = temp_c;
  }

  input[string_len] = '\0';

  printf("\nYou entered the string: %s\n", input);
  printf("length of string is %d.\n", string_len);


  *string_current_len = string_len;
  return 1;
}


int main(void) {
  int string_len = 0;
  char *input;

  printf("enter #q as filename or word to quit.\n");
      if(!dynamic_array(input, &string_len)){
       return 0;
      }

   printf("main string: %s\n", input);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 6

这个:

realloc(input, (sizeof(char)));
Run Code Online (Sandbox Code Playgroud)

是错的.该realloc()函数不会修改给定的指针(它不能!),它返回新的指针.它也可能失败,并返回NULL.

此外,第二个参数根本没有任何意义,它应该是先前分配的缓冲区的新的期望总大小,但是你总是通过(非常模糊)1.它不是"按这个数量增长" ,这是更低级别的"尝试将此增长到这个新大小,并返回增长缓冲区的新位置".

请仔细阅读文档.