#c
#c
Вопрос:
В этом коде я разделяю строку на разницу в новой строке "n"
. Я мог бы использовать strtok
для этой цели, но я его не использую. Я просто хочу получить определенную подстроку из строки. Нравится
Ожидаемый результат:
printf("%sn", word[0]);
Hello World
printf("%sn", word[1]);
How are you?
Данный результат:
printf("%sn", word[0]);
Hello World
How are you?
printf("%sn", word[1]);
d
How are you?
Я не знаю, что не так с этим кодом, что он дает мне такой результат.
Код
int main(){
char words[10][10];
int indexCtr = 0, wordIndex = 0, totalWords = 0;
char string[100] = "Hello Worldnhow are you?";
for(indexCtr = 0; indexCtr <= strlen(string); indexCtr ){
if(string[indexCtr] == "n" || string[indexCtr] == ''){
words[totalWords][wordIndex] = '';
totalWords ;
wordIndex = 0;
}
else{
words[totalWords][wordIndex] = string[indexCtr];
wordIndex ;
}
}
printf("%sn", words[0]);
}
Комментарии:
1.
string[indexCtr] == "n"
должно быть выдано предупреждение по сравнениюchar
сchar *
. Если это не так, пора повысить уровень предупреждения. Это должно бытьstring[indexCtr] == 'n'
. И к вашему сведению, оба этих предложения, включая их терминаторы, длиннее 10 символов, поэтому вы нарушаете своиwords
меньшие размеры массива и вызываете неопределенное поведение.2. Я использовал
printf("%sn", word[0])
и писалstring[indexCtr] == 'n'
, но это дает мне результат Привет, мир, как ты!3. Вы читали, что я сказал?
4. @WhozCraig Да, я прочитал и ответил вам
5. Я не задавал вопрос, поэтому мне не ясно, на что вы отвечаете. Две важные вещи, на которые я указал, — это прерыватели сделок, чтобы ваш код работал правильно. Они оба должны быть исправлены, особенно последнее, иначе ваш код вызывает неопределенное поведение, и любой вывод, который вы видите, не имеет значения.
Ответ №1:
Вы объявили
char words[10][10];
Итак, это будет соответствовать «Привет, мир» без пробела для нуля в конце.
Сделайте их слова больше. Вы уверены, что у вас не будет больше десяти слов? Следите за этим и в вашем цикле. Очевидно, что это не проблема для этой строки, но будьте осторожны.
(Также сравните символ ‘ n’, а не строковый литерал, как указано в комментариях.)