我正在尝试使用scanf读取和打印字符数组。这是我的源代码。我可以知道这个代码中的错误是什么吗?
#include<stdio.h>
#include<string.h>
void main()
{
int i;
char str[20];
printf( "Entern" );
for ( i=0; str[i] != ' '; i++ )
scanf( "%s", &str[i] );
for ( i=0; str[i] != ' '; i++ )
scanf( "%sn", str[i] );
}
您至少有三个问题:第一个问题是str
是单个字符串,而不是字符串数组,例如
char str[20][20];
第二个问题是,您显然试图用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] = ' ';
}
for (int j = 0; j < i; ++j)
printf("String #%d: '%s'n", i + 1, strings[i]);
#include <stdio.h>
int main(){
int i;
char str[20][32];
printf("Entern");
for (i=0; i < 20; ++i)
scanf("%31s", str[i]);
for (i=0; i < 20; ++i)
printf("%sn", str[i]);
return 0;
}
#include <stdio.h>
int main(){
int i, pos;
char *str[20];
char array[20*32];
printf("Entern");
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("%sn", str[i]);
return 0;
}