У меня возникли проблемы после ввода ввода getchar() в массив char * arr []. Причина, по которой я делаю это, заключается в том, что входные данные, которые будут представлять собой файл с аргументами командной строки, будут храниться в массиве указателей символов, который будет передан функции execvp.Построение массива указателей символов
Я использую getchar(), поэтому я могу позже реализовать функцию, которая позволяет пользователю нажать кнопку «tab» и попробовать и сопоставить файл с уже введенным текстом.
После выполнения приведенной ниже программы, я типа: 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