使用 for 循环初始化字符数组



我们还必须初始化(NULL(字符吗?

法典:

char S[N];
for (i = 0; i < N; ++i) {
scanf("%c", & S[i]); //Is it a wrong way to initialize char string character by character?
}
for (i = 0; i < N; ++i) {
printf("%d  %c", i, S[i]);
}

这应该有效,并且您不必在末尾添加 NULL(不是 NULL,它是 ASCII(,因为您将其视为 N 个不同字符的数组而不是字符串。如果要使用%sprintf它或对其调用strlen,则必须添加 NUL(并为数组分配 N+1 个字符(。

应在printf格式字符串的末尾添加n

请注意,您必须在一行上键入 N 个字符。例如,如果在第一个字符之后按回车键,则换行符将被视为第二个字符。

只要有足够的数据可以从stdin读取,您的代码就应该可以工作。您应该测试scanf()的返回值以检测文件的过早结束。输出将在一行上连接,因为您没有在格式字符串的末尾放置换行符。

这是一种更简单的fread方法:

#include <stdio.h>
int main() {
#define N 100;
char S[N];
int n = fread(S, 1, N, stdin);
if (n < N) {
printf("read error: only %d bytes readn", n);
}
for (int i = 0; i < n; ++i) {
printf("%d  %cn", i, S[i]);
}
return 0;
}

如果需要初始化字符数组,请编写:char S[N] = {0};-- 它将用零个字符初始化,如果需要,可以用作字符串终止符。

如果您需要读取字符串,只需使用fread(buf, 1, N, stdin);

总而言之,您的代码可能如下所示:

char S[N] = {0};
fread(buf, 1, N, stdin);

最新更新