我有一个指向字符的指针数组,我从控制台存储字符串。如果输入一个新的字符串以便对索引进行处理,我该如何检查?我想到了类似的东西,但我总是得到分段错误。
char** arr;
int i = 0;
int j = 0;
arr = malloc(sizeof(char*) * 10);
while (arr[i][j] != '\n') {
scanf("%c", &arr[i][j]);
j++;
}
i++;
// Read next string here
答案 0 :(得分:2)
您正在为指针分配内存。类似地,你需要在向它写入内容之前使这些指针指向某个内存位置。喜欢
arr[i] = malloc(sizeof(char) *20);
答案 1 :(得分:0)
您只为*arr
分配了内存,但尚未为**arr
分配内存。 arr
现在指向可以存储10个char指针的内存,但这些char指针指向哪里?为了“没有”,所以你首先必须让他们指向记忆才能通过arr[i][j]
取消引用它们
答案 2 :(得分:0)
我认为你或者也需要对j进行malloc,或者使用2维数组和[i * j_size + j]进行索引。此外,scanf可以使用%s
读取字符串。
另请参阅http://rosettacode.org/wiki/User_input/Text#C(以及有关rosetta代码的其他示例)。