c-如何使用scanf读取字符数组(不带字符串函数)



我正在尝试使用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;
}

最新更新