【发布时间】:2014-03-04 10:35:07
【问题描述】:
我在将 getchar() 的输入放入 char *arr[] 数组时遇到了麻烦。我这样做的原因是因为输入数据将是一个带有命令行参数的文件,将存储在一个 char 指针数组中以传递给 execvp 函数。
我使用 getchar() 是为了以后可以实现一个功能,该功能允许用户按下“选项卡”按钮并尝试将文件与已键入的文本匹配。
执行以下程序后,我输入: 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() ,但如果您达到分配限制而没有达到一些空间或 EOF,则可能需要使用
realloc()策略。您的“完成”检测应该将分配的字符串指针分配(不是 memcpy)到arr中的下一个插槽,然后从新分配的缓冲区重新开始。