На самом деле shopping[0]
имеет 7 символов один вы забыли \0
символ, который для окончания строки. Хотя strlen()
дает вам длину строки, это число символов до \0
.
strlen(shopping[0])
Но Total полукокс strlen(shopping[0]) + 1
= 7
В памяти ваша shopping[0]
что-то вроде:
+----+----+----+---+---+----+----+----+---+---+
| 'B'| 'A' |'G'|'E'|'L'| 'S'|'\0'| 0 | 0 | |
+----+----+----+---+---+----+----+----+---+---+
^`\0` also a char in shopping[0]
Edit:
Как я снова прочитал ваш вопрос, вы говорите 6 письма So strlen(shopping[0] )
это вы г ответ дать вам 6.
Поскольку вы хотите цикл найти количество писем (полукокс в моем ответе Неправительственного «\ 0»), то называя strlen()
бесполезно.Я хотел бы, что вы должны извлекать выгоду из нулевой строки завершения в C:
int num=0;
for(num = 0; shopping[0][num]!='\0'; num++);
printf("\n number of letters are %d\n",num);
Я думаю, что другие ответы не хорошо, они используют STRLEN() нет необходимости. Если я что-то не хватает, пожалуйста, дайте мне знать
Не лучше ли было бы избежать петли for? 'strlen() + 1 должен дать длину вправо? –
@ Koushik: это зависит от более широкого контекста; что вы действительно пытаетесь сделать. Вы можете создать случай для 'for (size_t i = 0; shopping [0] [i]! = '\ 0'; i ++)', а также решения, использующие 'strlen()'. Задний вопрос: «Как найти, что строка содержит 6 символов», и мой первый ответ - это именно то, как это сделать. В начальном вопросе указан цикл 'for'; Я предположил некоторые возможные конструкции цикла 'for' и рекомендовал вызывать' strlen() 'один раз, а не N раз. Без дополнительного кода в вопросе нелегко больше помочь. –