永发信息网

请教,下面的代码为什么会发生段错误?

答案:2  悬赏:30  手机版
解决时间 2021-02-18 10:37
  • 提问者网友:呐年旧曙光
  • 2021-02-18 04:32
#include
#include
int main()
{
char *p[2];

sprintf(p[1],"%s", "aaaaaaaaaa");

printf(p[1]);

return 0;

}

如果把sprintf(p[1],"%s", "aaaaaaaaaa");

换成
sprintf(p[0],"%s", "aaaaaaaaaa");


printf(p[1]);

换成
printf(p[0]);

程序就可以正确运行。为什么会这样?
最佳答案
  • 五星知识达人网友:一叶十三刺
  • 2021-02-18 04:43
知道你最后这两个吗?
*(p1+i)='\0';
*(p2+i)='\0';
明显错了.越界了.并不能付值.这不是一个数组.要区分.
只有4个字节的指针.
还有一个最严重的错误:
char *str1="abcdefg";
char *str2="hijklmn";
是指向常字符串的指针....
不可能改字符串的内容的.多注意C
你这个直接交换个指针就行了.

ASSERT(str2);
char *pszTemp = NULL;
pszTemp = str2;
str2 = str1;
str1 = pszTemp;

以前华为的经典面试题有个strcpy函数的写法的,对内存操作比较关注.
看看去吧.
全部回答
  • 1楼网友:天凉才是好个秋
  • 2021-02-18 05:22
<%if session("check")="wrong" then response.write " 密码错误" end if%> 改为 <%if session("check")="wrong" then response.write " 密码错误" %> 不能有双引号 后面也不需要end if
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯