在* char []上使用scanf()

时间:2015-09-09 06:35:40

标签: c

我正在尝试向用户询问三个字符串,将它们存储到字符串数组中,然后打印它们。以下代码编译正常,但不打印任何内容。我不知道为什么它不起作用,任何帮助将不胜感激:

char *buffer[3];
int i;
int len = sizeof(buffer)/sizeof(char*);
for (i=0; i<len; i++)
{
    printf("Enter word: ");
    scanf("%s", buffer[i]);
    printf("%s", (const char*)buffer[i]); 
}

让我感到困惑的是,我剥离了一个&#34;等级&#34;指针,它工作正常(即从缓冲区删除*:char缓冲区[3],scanf(&#34;%s&#34;,缓冲区),printf(&#34;%s&#34;,(const char) *)缓冲))。所以,只要我添加一个&#34;等级&#34;我认为这样可以保持事情的顺利但却失败了。它与缓冲区的初始化有关吗?非常感谢

1 个答案:

答案 0 :(得分:1)

C中的字符串是一个字符数组。指针不是一个字符数组。

Buffer是一个由3个指针组成的数组。您没有分配内存来将字符串保存在任何位置。并且指针未初始化,因此它们指向垃圾位置。

您必须使指针指向已分配的内存,或者声明一个数组数组(2D数组),例如char buffer [3][50],其中3是字符串数,50是最大字符串长度,包括空终止。

http://c-faq.com/aryptr/index.html