为什么这段代码一运行就.exe停止工作??

u013529401 2014-01-21 10:21:14
#include<stdio.h>
void swap(char *x,char *y)
{
char t;
t=*x;*x=*y;*y=t;
}

main()
{
char *s1="abc",*s2="123";
swap(s1,s2);
printf("%s,%s\n",s1,s2);
}
...全文
529 43 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
贵子潘 2014-01-22
  • 打赏
  • 举报
回复
很简单,因为char *s1="abc",*s2="123";这样写是不真确的写法 "abc"是常量字符串,保存在只读的内存块里。应该养成这样写的习惯: const char* s1="abc"; char s1[] = "abc"; //这样就OK,是用常量字符串"abc"初始化局部变量字符数组s1
大奶兔白糖 2014-01-21
  • 打赏
  • 举报
回复
因为char1和char2都指向了常量区,内存的内容应该不能变的吧?
cf_上善若水 2014-01-21
  • 打赏
  • 举报
回复
和传的值得地址有关
cf_上善若水 2014-01-21
  • 打赏
  • 举报
回复
#include <stdio.h> void swap(char *x,char *y) { char *t; t=x;x=y;y=t; printf("%s,%s\n",s1,s2); } int main(void) { char *s1="abc",*s2="123"; swap(s1,s2); }
零度的折翅 2014-01-21
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/350206749 函数传递大总结。什么时候交换成功,什么时候交换不成功,lz参考下吧
u013529401 2014-01-21
  • 打赏
  • 举报
回复
引用 18 楼 zeuong 的回复:
因为你S1和S2都是指向一个字符串常量,怎么可能调换他们头字母,改成数组就行了
谢谢,,我居然发现这试卷里面的Bug了!
零度的折翅 2014-01-21
  • 打赏
  • 举报
回复
引用 31 楼 u013529401 的回复:
[quote=引用 16 楼 zeuong 的回复:] void swap(char* x, char* y) { char temp; temp = *x; *x = *y; *y = temp; } int main() { char s1[20] = "abc"; char s2[20] = "123"; swap(s1,s2); printf("%s,%s\n",s1,s2); getchar(); return 1; }
对的,但是为什么要改掉成char s1[20] = "abc"; char s2[20] = "123";[/quote] 这样就不会抛出异常了,具体参考10楼的解释。
零度的折翅 2014-01-21
  • 打赏
  • 举报
回复
引用 28 楼 u013529401 的回复:
[quote=引用 27 楼 huoqingna2332 的回复:] [quote=引用 26 楼 YTerrenceLau 的回复:] 楼主的需求,16楼不就是答案么。
要1bc,a23 , 16楼的就是[/quote]你的是对的,但是为什么要把指针改成形式改成数组形式啊?[/quote] 这个是为了告诉你,你开始的代码异常的错误,参考我10楼的解释。
u013529401 2014-01-21
  • 打赏
  • 举报
回复
引用 16 楼 zeuong 的回复:
void swap(char* x, char* y) { char temp; temp = *x; *x = *y; *y = temp; } int main() { char s1[20] = "abc"; char s2[20] = "123"; swap(s1,s2); printf("%s,%s\n",s1,s2); getchar(); return 1; }
对的,但是为什么要改掉成char s1[20] = "abc"; char s2[20] = "123";
zhuobattle 2014-01-21
  • 打赏
  • 举报
回复
引用 27 楼 huoqingna2332 的回复:
[quote=引用 26 楼 YTerrenceLau 的回复:] 楼主的需求,16楼不就是答案么。
要1bc,a23 , 16楼的就是[/quote] 那么就要定义把字符串存在栈或上堆上,不要放在全局静态数据区。
u013529401 2014-01-21
  • 打赏
  • 举报
回复
引用 27 楼 huoqingna2332 的回复:
[quote=引用 26 楼 YTerrenceLau 的回复:] 楼主的需求,16楼不就是答案么。
要1bc,a23 , 16楼的就是[/quote]说错了,以为你是16L了
u013529401 2014-01-21
  • 打赏
  • 举报
回复
引用 27 楼 huoqingna2332 的回复:
[quote=引用 26 楼 YTerrenceLau 的回复:] 楼主的需求,16楼不就是答案么。
要1bc,a23 , 16楼的就是[/quote]你的是对的,但是为什么要把指针改成形式改成数组形式啊?
零度的折翅 2014-01-21
  • 打赏
  • 举报
回复
引用 26 楼 YTerrenceLau 的回复:
楼主的需求,16楼不就是答案么。
要1bc,a23 , 16楼的就是
YTerrenceLau 2014-01-21
  • 打赏
  • 举报
回复
楼主的需求,16楼不就是答案么。
u013529401 2014-01-21
  • 打赏
  • 举报
回复
引用 19 楼 huoqingna2332 的回复:
void swap(char **x,char **y) { char *temp = NULL; temp=*x; *x=*y; *y=temp; } main() { char str1[]="abc"; char str2[]="123"; char *p1=str1; char *p2=str2; printf("%s\n",p1); printf("%s\n",p2); swap(&p1,&p2); printf("%s\n",p1); printf("%s\n",p2); }
谢谢啊,可是怎么才能让他输出1bc,a23啊,这答案就是这个
u013529401 2014-01-21
  • 打赏
  • 举报
回复
引用 20 楼 richyhuang 的回复:
这样
void swap(char *x,char *y)
{
	char *t;
	t=x;x=y;y=t;
}

void test2(void)
{
	char *s1="abc",*s2="123";
	swap(s1,s2);
	printf("%s,%s\n",s1,s2);
}
结果不是1bc,a23啊?
YTerrenceLau 2014-01-21
  • 打赏
  • 举报
回复
,还有交换字符这种需求,服了。匿了,貌似楼上有人给出答案了。
u013529401 2014-01-21
  • 打赏
  • 举报
回复
引用 12 楼 yfl819586803 的回复:

#include<stdio.h>
void swap(char **x,char **y)
{
    char *t;
    t=*x;*x=*y;*y=t;
}
  
main()
{
    char *s1="abc",*s2="123";
    swap(&s1,&s2);
    printf("%s,%s\n",s1,s2);
}
这个虽然可以执行,但是与原题不符啊,这题输出结果答案是1bc,a23,而且他给的代码就是开始那段,是不是哪弄错了? 谢谢各位回答~
richyhuang 2014-01-21
  • 打赏
  • 举报
回复
vc6.0 测试通过,
richyhuang 2014-01-21
  • 打赏
  • 举报
回复
这样
void swap(char *x,char *y)
{
	char *t;
	t=x;x=y;y=t;
}

void test2(void)
{
	char *s1="abc",*s2="123";
	swap(s1,s2);
	printf("%s,%s\n",s1,s2);
}
加载更多回复(23)
在Windows 10或Windows 11操作系统中,用户经常会遇到共享打印机时出现的一系列错误代码,这些错误代码可能会阻碍打印机共享功能的正常使用。常见的错误代码包括0x00000057、0x00000709和0x0000011b,这些代码通常指出了不同的问题,比如权限不足、服务未运行或配置错误等。除此之外,还有一些故障提示如“连接失败”或“内存不足”,这些都可能影响到打印机共享的稳定性。 要解决这些故障,首先要确保打印机已经正确地连接到网络,并且在需要共享的电脑上进行了设置。确保打印机驱动程序是最新的,并且在共享设置中没有错误配置。对于权限问题,需要检查网络上的用户账户是否具有足够的权限来访问共享打印机。同时,也要确保打印机服务正在运行,特别是“Print Spooler”服务,因为这是打印机共享服务的核心组件。 在某些情况下,问题可能与操作系统的更新有关,如升级到最新版的Windows 10或Windows 11后可能出现的兼容性问题。这时,可能需要查看微软的官方支持文档来获取特定的解决方案或更新。 对于错误代码0x00000057,这通常是由于没有足够的权限来访问网络打印机或其共享资源,解决方法是确保网络打印机的权限设置正确,包括在组策略中设置相应的访问权限。而0x00000709错误可能是由于打印机驱动问题或打印机端口配置错误,可以尝试重新安装或更新打印机驱动来解决。至于0x0000011b错误,这往往是因为打印机队列服务的问题,检查并重启“Print Spooler”服务通常是解决这类问题的常见手段。 至于“连接失败”或“内存不足”这类故障,通常与客户端和打印机之间的网络连接以及打印机本地资源的使用情况有关。检查网络连接,确保打印机所在的网络段没有故障或中断。同时,如果打印机的打印队列长时间得不到处理,可能会导致内存不足的情况,这时可能需要清理打印队列或增加打印机的内存配置。 为了帮助用户更快速地解决这些问题,市面上出现了各种打印机共享错误修复工具。这些工具往往通过预设的修复程序来自动检测和修正打印机共享中常见的问题。它们可以快速检查打印机驱动、网络连接以及共享设置,并且能够提供一键修复功能,大幅减少了用户自行排查和解决问题的难度。 然而,在使用这些修复工具之前,用户应确保这些工具的来源是安全可靠的,避免因使用不当的修复工具而引发其他系统安全或隐私问题。用户可以到官方平台或者信誉良好的软件提供商处下载这些工具。通过细心检查打印机的共享设置,及时更新驱动程序和服务,以及合理使用修复工具,大多数共享打印机的问题都可以得到有效的解决。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧