我正在尝试使用scanf读取和打印字符数组。这是我的源代码。我可以知道这段代码中的错误是什么吗?
#include<stdio.h>
#include<string.h>
void main()
{
int i;
char str[20];
printf( "Enter\n" );
for ( i=0; str[i] != '\0'; i++ )
scanf( "%s", &str[i] );
for ( i=0; str[i] != '\0'; i++ )
scanf( "%s\n", str[i] );
}
答案 0 :(得分:3)
你有至少三个问题:第一个是str
是单个字符串,而不是字符串数组,例如< / p>
char str[20][20];
第二个问题是你显然试图打印&#34;字符串&#34;与scanf
。
第三个问题是你在初始化时正在使用数组str
。局部变量未初始化,并且它们的值是不确定的。这意味着str
的内容似乎是随机的。使用未初始化的局部变量(就像在第一个循环中一样)会导致未定义的行为。
修复(部分)代码的一种方法可能就像
char strings[20][20];
int i;
for (i = 0; i < 20; ++i)
{
char *p = fgets(strings[i], sizeof(strings[i]), stdin);
if (p == NULL)
break; /* Error reading, or "end of file" */
/* The fgets function can leave the newline in the buffer, remove it */
if (strings[i][strlen(strings[i]) - 1] == '\n')
strings[i][strlen(strings[i]) - 1] = '\0';
}
for (int j = 0; j < i; ++j)
printf("String #%d: '%s'\n", i + 1, strings[i]);
答案 1 :(得分:0)
#include <stdio.h>
int main(){
int i;
char str[20][32];
printf("Enter\n");
for (i=0; i < 20; ++i)
scanf("%31s", str[i]);
for (i=0; i < 20; ++i)
printf("%s\n", str[i]);
return 0;
}
#include <stdio.h>
int main(){
int i, pos;
char *str[20];
char array[20*32];
printf("Enter\n");
for (pos=i=0; i < 20; ++i){
int len;
if(EOF!=scanf("%31s%n", &array[pos], &len)){
str[i] = &array[pos];
pos += len + 1;
} else {
str[i] = NULL;
break;
}
}
printf("\n");
for (i=0; i < 20 && str[i] != NULL; ++i)
printf("%s\n", str[i]);
return 0;
}