char *p 有问题 帮我看看下面代码哪里有问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 11:04:20
帮我看看下面代码哪里有问题
#include <stdio.h>
int main(void)
{
char *p1="";char *p2="";
printf("input p1\n");
scanf("%s",&p1);
printf("p1=%s\n",&p1);
printf("input p2\n");
scanf("%s",&p2);
printf("p2=%s\n",&p2);
printf("p1=%s\n",&p1);
}
运行后输入
input p1 /t/s
打印 p1 /t/s
input p2 /w/q
打印 p2 /w/q
打印 p1 s
我试过char p1[]="".... 结果p1还是被修改

你的程序中,p1,p2指向的地址是常量,它们不能被修改,这有问题
主要的问题是,你在使用的时候,竟然取p1,p2的地址,这就导致错误不可预期了
p1,p2的内容,也就是它们的值,是一个地址;它们作为变量,也有他们自己的地址
不知道你能否理解?

对的应该这样写:

#include<stdio.h>

int main(void)
{
char p1[80];char p2[80];
printf("input p1\n");
scanf("%s",p1);
printf("p1=%s\n",p1);
printf("input p2\n");
scanf("%s",p2);
printf("p2=%s\n",p2);
printf("p1=%s\n",p1);
}

#include <stdio.h>
int main(void)
{
char *p1="";char *p2="";
printf("input p1\n");
scanf("%s",p1);
printf("p1=%s\n",p1);
printf("input p2\n");
scanf("%s",p2);
printf("p2=%s\n",p2);
printf("p1=%s\n",p1);
}

int printf( const char *format [, argument]... );