【发布时间】:2019-04-09 07:15:06
【问题描述】:
#include<stdio.h>
void main(){
char *r;
printf("Enter the string : ");
scanf("%s",&r);
printf("\nThe string is : %s",&r);
}
我正在使用 DEV C++(tdm-gcc 4.9.2 64 位版本) 在 printf 语句和删除中将导致打印字符串,但它没有显示任何输出,这让我很困惑 我读到我们也可以在没有 & 的情况下使用扫描,但它在 C 中也不起作用
【问题讨论】:
-
哦,天哪...您已将一个字符串读入堆栈上用于保存指针的内存区域。如果您删除了
scanf和printf调用的&,这几乎是正确的,除非您需要首先通过分配一些内存来实际初始化指针。 -
你没有分配任何内存
-
Malloc and scanf的可能重复
-
关于:
void main(){main函数只有两个有效签名。它们是:int main( void )和int main( int argc, char *argv[] ) -
关于:
char *r;和scanf("%s",&r);1)r已经是一个指针,因此不需要&。 2) 指针r未设置为指向应用程序拥有的任何内存,因此写入它指向的位置是未定义的行为。 4)写入指针(正如代码所做的那样)意味着指针将被溢出(取决于底层架构 4 或 8 个字节,这是未定义的行为 4)当使用格式说明符“%s”时,总是包含一个最大字符修饰符,它比输入缓冲区的长度小一,以避免任何缓冲区溢出( %s 总是附加一个 NUL 字节)