是否可以使用%s转换说明符转换char

时间:2017-02-12 21:13:30

标签: c

char c;
scanf("%s",&c);

这是对还是错?在stdin中输入EOF字符时究竟发生了什么?

我知道有类似的东西,但我找不到它?

我已经知道完全正确的表格应该是:

scanf("%hhd",&c);

3 个答案:

答案 0 :(得分:2)

不,这不正确。

虽然看起来将地址发送到char(&c)可能是等效的,但它与“string”不同。

当然,C实际上没有字符串类型;相反,我们在标准库字符串和printf样式函数中找到了一个抽象,它使用字符指针的约定来指向字符串末尾的空字节(空终止符)的一组字节。

如果您告诉scanf读取"%s"然后提供char &,则分配将仅为一个字节。即使输入只是一个字节,它也会以空值终止(附加到末尾的额外字节),自动导致缓冲区溢出。

答案 1 :(得分:0)

这是错误的。你不能在char中放一个字符串。这是未定义的行为,可能会导致内存踩踏。

scanf("%c", &c);

是您从char获取scanf的方式。

更好的是,完全避免使用scanf()并使用getchar()

int c = getchar();

请注意返回类型。

答案 2 :(得分:0)

使用char c;scanf("%s",&c).显然是错误的。格式说明符"%s"读入一系列非空白字符,并在末尾添加'\0'(参见cppreference concerning scanf)。所以它很可能超过单个字符char c提供的内存(除非用户只按下return或ctrl-d)。

请改用char c;scanf("%c",&c).

相关问题