scanf() 两个字符串指针产生异常

#include <stdio.h>

int main(void)
{
    char *str1 = "0";
    char *str2 = "0";

    printf("Enter str1: ");
    scanf("%s", str1);

    printf("Enter str2: ");
    scanf("%s", str2);

    printf("\nstr1 = %s\nstr2 = %s\n", str1, str2);

    return 0;
}

输入输出:

Enter str1: 1234
Enter str2: 5678

str1 = 125678
str2 = 5678

尝试过 fflush(stdin) 依旧无解,既然是指向不同的指针,为何 str1 会被 str2 的输入影响?

阅读 4k
3 个回答

我也是初学,所以可能帮不到你多少。我的话会这样写:

#include <stdio.h>

int main(void)
{
    char str1[20];
    char str2[20];

    printf("Enter str1: ");
    scanf("%s", str1);

    printf("Enter str2: ");
    scanf("%s", str2);

    printf("\nstr1 = %s\nstr2 = %s\n", str1, str2);

    return 0;
}

你这个代码错误的地方很多……
首先 char *str ="0";
这句是说"0"的地址赋值给指针变量
(如果你想给指针变量初始化应该是=0而不是"0")
其次下边你这个代码scanf("%s",str1);这句是非常不对的……str是一个指针变量,你可以用它指向某个地址,但是地址由计算机自己控制,而不能由你决定,你不能输入一个字符串给str1作值……而且char是指针变量所指向的变量的类型,而不是指针变量的类型,它的类型不由你决定(计算机里通常是16进制的地址)

每个操作都把指针的值(指向的地址)和指向的值(地址中的值)打印出来看看

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进