我该如何解决这个问题

时间:2016-02-12 10:11:29

标签: c

我想在数组中打印String。

#include "stdio.h"

    int main(){
        char str[201];
        /*scanf("%[^\n]", str);*/
        printf("%s\n", str);
        const char* A[26] = {"A", "B", "X", "P", "Q", "R", "M", "N", "C", "E", "D", "K", "L", "J", "O", "S", "H", "T", "U", "F", "V", "Z", "G", "W", "I"};
        printf("%s\n", A[5]);
    }

但输出

enter image description here

2 个答案:

答案 0 :(得分:2)

正在打印的垃圾值是因为未初始化str

使用注释的scanf行,它会正常工作。

或者如果您不想使用该行,我建议您像str

那样初始化A

答案 1 :(得分:1)

这是非常基本的。

正在打印的值是垃圾,因为每当您在大多数语言中打印未初始化的字符串时,输出都是垃圾,因为当您声明一个10个字符的字符串时,堆栈上只分配了10个字节。没有具体的价值。

看起来你得到的输出是加密的。 (感谢Alter Mann评论)。

但是,当您使用fgetsscanf或任何其他功能阅读字符串时,如果它未被初始化,则无关紧要。无论用户输入什么值,它都存储在字符串中。因此,取消评论scanf将导致完美输出。如果您对[{1}}进行了评论,因为您不想使用它,只需将其初始化为:

scanf

并放置你想要的任何东西。

此外,我不确定这是否是一个好方法,所以请查看:Proper way to initialize a string in C

基本上,如果您不想阅读完整的答案,输出完全正确,因为您尚未初始化字符串,而您获得的char str[201] = {"a", "b"}; 存储在{{ 1}},你打印。