[英]How do I dynamically create an array of strings using scanf in C
所以我一直在搜索堆栈溢出一个多小时,我不明白为什么这个函数给我一个分段错误。 我想创建一个字符串数组,通过scanf扫描字符串,动态改变每个字符串的大小并返回字符串数组。 任何人都可以帮忙吗? 谢谢你。
char** readScores(int* count) {
int c = 0;
char** arr =(char**)malloc(100 * sizeof(char*));
char* in;
while(scanf("%s", in) != EOF) {
arr[c] = (char*)malloc(strlen(in)+1);
strcpy(arr[c], in);
}
*count = c;
return arr;
}
char* in;
while(scanf("%s", in) != EOF) {
这告诉计算机从标准输入读取到in
指向的char
缓冲区。
哪个不存在,因为in
没有初始化为任何东西(更不用说有效的缓冲区了)。
我不会只使用 scanf fgets。
您需要为arr
和arr
元素引用的每一行分配内存
char** readScores(size_t *count) {
size_t lines = 0;
char** arr = NULL, **tmp;
char* in = malloc(MAXLINE), *result;
size_t len;
if(in)
{
do{
result = fgets(in, MAXLINE, stdin);
if(result)
{
len = strlen(in);
tmp = realloc(arr, sizeof(*tmp) * (lines + 1));
if(tmp)
{
arr = tmp;
len = strlen(in);
arr[lines] = malloc(len + (len == 0));
if(arr[lines])
{
if(len) memcpy(arr[lines], in, len - 1);
arr[lines++][len] = 0;
}
else
{
// error handling
}
}
else
{
// error handling
}
}
}while(result);
free(in);
}
*count = lines;
return arr;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.