【发布时间】:2021-01-26 11:30:54
【问题描述】:
这段代码引发了分段错误,我并不完全是我做错的地方。一旦我输入一个字符串,它就会导致分段错误。我期待它在 char 数组的新元素中附加一个新字符串。
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
char** append(char** b, size_t* size, char target[]);
int main(){
size_t size = 1;
char** b = malloc(sizeof(char)*size);
while(1){
char input[100] = "";
scanf("%99s", input);
if (strcmp(input, "end") == 0)
break;
b = append(b, &size, input);
}
for(int i = 0; i < size; i++)
printf("%s ", b[i]);
return 0;
}
char** append(char** arr, size_t* size, char target[]){
*size += 1;
size_t b = *size;
char** new_arr = realloc(arr, b * sizeof(char));
strcpy(new_arr[b - 1], target);
return new_arr;
}
【问题讨论】:
-
Don't cast malloc result
char **b应该是char *b -
你想要一个字符串数组,还是一个接一个地追加字符串?
-
为什么会这样?我想做一个二维字符数组
-
@Izzuddin667 这个语句 scanf("%s", input);调用未定义的行为,因为指针输入未初始化。
-
阅读Modern C 和this C reference。有关替代方法,请参阅this answer。阅读您的 C 编译器(例如GCC,用作
gcc -Wall -Wextra -g...)和调试器(例如GDB...)的文档。您可能对valgrind 感兴趣