Я пишу некоторые простые программы на языке C, чтобы выучить язык, и до сих пор я думаю, что начинаю основываться, но натолкнулся на странное поведение, которое я не понимаю. Может ли кто-нибудь сказать мне, что здесь не так, и как это исправить?Устранение непреднамеренного поведения строки в C
#include <stdio.h>
#include <string.h>
int main() {
const unsigned int MAX_LENGTH = 20;
char str[MAX_LENGTH];
unsigned int len = 0, i, j;
for (i = 0; i < MAX_LENGTH; i++) {
str[i] = getchar();
if (strncmp(&str[i], "\n", 1) == 0) {
break;
}
len++;
}
for (i = 1; i < len; i++) {
char whitespace[len];
for (j = 0; j < i; j++) {
whitespace[j] = ' ';
}
printf("%s%c\n", whitespace, str[i]);
}
return 0;
}
Я набрал "Hello World!" в качестве входных данных для обхвата getchar()
метода, и я ожидал, что консоль выглядеть примерно так:
Hello World!
e
l
l
o
W
o
r
l
d
!
Но вместо этого я получил эту тарабарщину:
Hello World!
;oQ?e
oQ?l
Q?l
?o
W
o
X?Pr
?Pl
Pd
!
Почему код с помощью ', если (strncmp (& ул [I], "\ п", 1) == 0)' вместо ', если (str [i] == '\ n') '? Возможно, что-то мне не хватает. – chux
Ах спасибо, что указали это. Как я уже сказал, я новичок, поэтому я попробовал '' str [i] == "\ n" '', и когда сборка крикнула на меня, я просмотрел строку сравнения и нашел этот метод. –