Различие массива и строки в си
Я начинающий, не ругайтесь сильно :) Я не понимаю причину, по которой вывод массива типа char с помощью %s не равен выводу по элементу.
#include<stdio.h>
int main() {
char a = '1';
char b = '2';
char c[2];
for (int i = 0; i < 2; i++){
if (i == 0)
c[i] = a;
else
c[i] = b;
}
printf("%s\n",c);
for (int i = 0; i < 2; i++) {
printf("%c", c[i]);
}
return 0;
}
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
все очень просто. Достаточно спросить себя, "как printf узнает длину строки?" а делает это очень просто - по нулевому символу в конце строки. У Вас же такого нет и printf выводит до тех пор, пока такой не найдет. Вам повезло, он нашелся быстро. А могло и не повезти.
Я вот так поменяю программу и все будет работать
#include<stdio.h>
int main() {
char a = '1';
char b = '2';
char c[3];
for (int i = 0; i < 2; i++){
if (i == 0)
c[i] = a;
else
c[i] = b;
}
c[2] = '\0';
printf("%s\n",c);
for (int i = 0; i < 2; i++) {
printf("%c", c[i]);
}
return 0;
}
Можно исправить и меньшей кровью. Просто уточнить для printf кол-во символов
printf("%.2s\n",c);
ну или если не хочется хардкодить, можно даже так
printf("%.*s\n",2,c); // двойку можно вынести теперь