Как разделить строку с разницей в новой строке?

#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’, а не строковый литерал, как указано в комментариях.)