用户在函数中输入字符串后动态扩展数组dynamic_array我的问题似乎是当我在main dynamic_array返回true 后尝试在main中使用扩展数组agian时.
函数调用后,我尝试打印input与printf("main string: %s\n", input)程序会崩溃.这似乎是*input在main永远不会被延长.
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)
这个:
realloc(input, (sizeof(char)));
Run Code Online (Sandbox Code Playgroud)
是错的.该realloc()函数不会修改给定的指针(它不能!),它返回新的指针.它也可能失败,并返回NULL.
此外,第二个参数根本没有任何意义,它应该是先前分配的缓冲区的新的期望总大小,但是你总是通过(非常模糊)1.它不是"按这个数量增长" ,这是更低级别的"尝试将此增长到这个新大小,并返回增长缓冲区的新位置".
请仔细阅读文档.