[英]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.