这个字符串是如何存储和打印的?

时间:2011-12-25 08:33:37

标签: c

我理解当我使用getchar()putchar()和while循环更明确地执行此操作时发生的情况;但是,我只是想知道在执行下面的代码(幕后)时输入字符串的存储和处理是否相同?每个字符是否都存储为“键入”数组的一个元素? scanf如何做到这一点?等

#include <stdio.h>

int main(void)
{
    char typed[500];
    scanf("%[^\tEOF]", &typed);

    printf("%s", typed);
    return(0);
}

感谢。

2 个答案:

答案 0 :(得分:3)

是的,每个字符都存储为数组typed的一个元素。

请注意,您的扫描字符串会查找除标签,“E”,“O”或“F”以外的任何内容;模式中的“EOF”与EOF等人在文件末尾返回的getchar()无关。此外,您的代码容易受到缓冲区溢出的影响(因此来自knittl的简洁注释),因为您没有在格式字符串中指定缓冲区的大小。你会更安全:

scanf("%499[^\tEOF]", &typed);

此外,main()的返回类型为int,而不是void

答案 1 :(得分:1)

每个元素都保存为数组元素。当变量已经是数组时,不应该使用&。数组名称已经是地址。

getchar()具有默认分隔符:return键并将输入仅作为字符

虽然scanf通过指定格式允许各种类型的输入:%s%d

您还可以为scanf指定分隔符(默认为空格,制表符,输入)

在您的情况下,分隔符被指定为制表符或EOF