#c
#c
Вопрос:
У меня есть этот проект кодирования, над которым я застрял уже некоторое время. Я не очень хорошо знаком с кодированием на C, больше с Java.
Вот мой код:
char *array[20];
int linecount = 0;
bool c = true;
array[0] = (char*)malloc(96 *sizeof(char));
// array[0] = "temp";
while(c){
array[linecount] = (char*)malloc(96 *sizeof(char));
printf("Enter a string: ");
fgets(array[linecount], sizeof(array[linecount]), stdin);
if(strcmp(array[linecount], "") == 10) c = false;
linecount ;
}
for(int i = 0; i < linecount; i ){
printf("%d %s",i, array[i]);
}
printf("Done");
Часть, на которой я застрял, хранит пользовательский ввод с консоли в массив строк. Я просмотрел множество ответов на stackoverflow и обнаружил, что существует так много разных ответов, что я ошеломлен. Итак, если бы вы могли ответить в самых простых терминах, как и что делает код, это мне очень помогло бы.
Итак, я создал массив указателей с фиксированной длиной 20 только для начала и цикла while. Но когда я запускаю программу, она работает так, как я хочу. Когда я ввожу любые пробелы во входных данных, он печатает «Введите строку:» несколько раз.
Комментарии:
1.
fgets
сохраняет n в конце строки, поэтомуstrcmp(array[linecount], "") == 10
бессмысленно, а сравнение с 10 еще более бессмысленно. Такжеsizeof(array[linecount])
это не то, что вы думаете. Вы хотите96
вместо этого. Скорее всего, проблем больше.2. Спасибо, похоже, это сработало, когда я изменил его на 96. Также почему strcmp(array[linecount], «») == 10 бессмысленно? Я пытаюсь проверить, является ли строка пустой, и я нашел другие сообщения, в которых говорится об использовании strcmp. Когда я печатаю его, сравнивая его с пустой строкой, я получаю 10, поэтому я решил сравнить его с 10.
3. Объясните, что
strcmp(array[linecount], "") == 10
предполагается делать? Что такое магическое число 10?4.
sizeof(array[linecount])
это размер самого указателя (4 или 8 байт, в зависимости от платформы). Это не размер буфера памяти, на который ссылается. При использовании динамического выделения памяти (напримерmalloc
) вы должны сами запомнить размер буфера. Вы не можете просто использоватьsizeof
для его определения.5. Проверьте возвращаемое значение fgets. Возможно, он вернул -1 и ничего не записал в буфер.