我在将来自getchar()的输入放入char * arr []数组中时遇到了麻烦。我这样做的原因是因为输入数据,这将是一个带有命令行参数的文件,将被存储在char指针数组中,以传递给execvp函数。构造一个char指针数组
我使用的是getchar(),所以我稍后可以实现一个允许用户按下'tab'按钮并尝试将文件与已输入的文本进行匹配的功能。
执行以下程序后,I型: LS -a(后面有个空格)
这显然应该运行,但没有,我收到了SEG 11故障。如果有人可以指出我做错了那将是非常好的!
谢谢。
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
int main(){
char *arr[10];
int l_count = 0, w_count = 0;
char c;
char *curLine;
curLine = (char*)calloc(10, sizeof(char));
while((c=getchar()) != '\n'){
if (isspace(c)){
curLine[l_count]='\0';
memcpy(arr[w_count],curLine,strlen(curLine));
++w_count;
l_count=0;
}
else{
curLine[l_count]=c;
++l_count;
}
}
arr[w_count]='\0';
// Testing
int i;
for (i=0;i<2;i++){
printf("%s, ", arr[i]);
}
printf("\n");
return 0;
}
您需要为循环中的每次迭代分配一个新的读缓冲区。没有memcpy()应该是必需的,虽然'realloc()'策略可能是有保证的,如果你达到你的分配限制而不触及一些空间或EOF。你的“完成”检测应该*分配*(不是memcpy)分配的字符串指针到'arr'中的下一个槽,然后用新分配的缓冲区重新开始。 – WhozCraig