我在將來自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