user-0 提问: 请教一个while与for的问题

回复:
user: user-1
content: 引用 12 楼 dimply 的回复:[quote=引用 9 楼 zxh707wk 的回复:] [quote=引用 7 楼 anshiny 的回复:]  ​case '\n':     ​    ​    ​    ​s[j++] = '\\';     ​    ​    ​    ​s[j++] = 'n';     ​    ​    ​    ​break;     ​    ​    ​case '\t':     ​    ​    ​    ​s[j++] = '\\';     ​    ​    ​    ​s[j++] = 't';     ​    ​    ​    ​break; 你的代码哪里有i++了？ 莫非我看花眼了？ 在for循环里。。。[/quote] 参考答案用了for循环，可是你用的是while啊，while必须在循环体里面i++的。 因为i没增加所以会一直循环，j倒是会一直增加，一直在内存里往下写，最后写不下了，就会出这个错误。[/quote] 好吧。。。看错一个代码了。。。

user: user-2
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

user: user-1
content: 我把输入字符串那部分删了，运行正常，输出也正常 #include <stdio.h>  void escape(char s[],char t[]) { 	int i,j ; 	for(i=j=0;t[i]!='\0';i++) 	{ 		switch(t[i]) 		{ 		case '\n': 		s[j++]='\\' ; 		s[j++]='n' ; 		break ; 		case '\t': 		s[j++]='\\' ; 		s[j++]='t' ; 		break ; 		default: 		s[j++]=t[i]; 		break ; 		} 	} 	s[j]='\0' ; }  int main() { 	char t[100]="this	asdsad\ndassd\n\n\nasdad"; 	char s[100]; 	printf("%s\n",t); 	escape(s,t); 	printf("%s\n",s); 	return 0 ; }

user: user-1
content: 引用 7 楼 anshiny 的回复: ​case '\n':     ​    ​    ​    ​s[j++] = '\\';     ​    ​    ​    ​s[j++] = 'n';     ​    ​    ​    ​break;     ​    ​    ​case '\t':     ​    ​    ​    ​s[j++] = '\\';     ​    ​    ​    ​s[j++] = 't';     ​    ​    ​    ​break; 你的代码哪里有i++了？ 莫非我看花眼了？ 在for循环里。。。

user: user-0
content: 引用 5 楼 u014749886 的回复:楼主 你的程序进入​case '\n':和case '\t':分支的时候，没有对i进行操作啊 谢谢你 正如你说的 我修改了代码问题解决了 感谢

user: user-0
content: 引用 7 楼 anshiny 的回复: ​case '\n':     ​    ​    ​    ​s[j++] = '\\';     ​    ​    ​    ​s[j++] = 'n';     ​    ​    ​    ​break;     ​    ​    ​case '\t':     ​    ​    ​    ​s[j++] = '\\';     ​    ​    ​    ​s[j++] = 't';     ​    ​    ​    ​break; 你的代码哪里有i++了？ 莫非我看花眼了？  你说得对  确实是这样 我理解错了 我在修改了代码 	while(t[i++] != '\0') 问题解决了 非常感谢

user: user-3
content: 楼主你CASE的i++呢

user: user-4
content: ​case '\n':     ​    ​    ​    ​s[j++] = '\\';     ​    ​    ​    ​s[j++] = 'n';     ​    ​    ​    ​break;     ​    ​    ​case '\t':     ​    ​    ​    ​s[j++] = '\\';     ​    ​    ​    ​s[j++] = 't';     ​    ​    ​    ​break; 你的代码哪里有i++了？ 莫非我看花眼了？

user: user-5
content: 引用 12 楼 dimply 的回复:[quote=引用 9 楼 zxh707wk 的回复:] [quote=引用 7 楼 anshiny 的回复:]  ​case '\n':     ​    ​    ​    ​s[j++] = '\\';     ​    ​    ​    ​s[j++] = 'n';     ​    ​    ​    ​break;     ​    ​    ​case '\t':     ​    ​    ​    ​s[j++] = '\\';     ​    ​    ​    ​s[j++] = 't';     ​    ​    ​    ​break; 你的代码哪里有i++了？ 莫非我看花眼了？ 在for循环里。。。[/quote] 参考答案用了for循环，可是你用的是while啊，while必须在循环体里面i++的。 因为i没增加所以会一直循环，j倒是会一直增加，一直在内存里往下写，最后写不下了，就会出这个错误。[/quote]  同上

user: user-6

user: user-7
content: 引用 9 楼 zxh707wk 的回复:[quote=引用 7 楼 anshiny 的回复:]  ​case '\n':     ​    ​    ​    ​s[j++] = '\\';     ​    ​    ​    ​s[j++] = 'n';     ​    ​    ​    ​break;     ​    ​    ​case '\t':     ​    ​    ​    ​s[j++] = '\\';     ​    ​    ​    ​s[j++] = 't';     ​    ​    ​    ​break; 你的代码哪里有i++了？ 莫非我看花眼了？ 在for循环里。。。[/quote] 参考答案用了for循环，可是你用的是while啊，while必须在循环体里面i++的。 因为i没增加所以会一直循环，j倒是会一直增加，一直在内存里往下写，最后写不下了，就会出这个错误。

user: user-8
content: 相当于检测到\n和\t就死循环了啊

user: user-8
content: 楼主 你的程序进入​case '\n':和case '\t':分支的时候，没有对i进行操作啊

user: user-0
content: 引用 1 楼 jerry_dqh 的回复:点那个调试程序 ，单步跟踪，要学习分析  我之前在单位用的VC，他直接进汇编界面了 我也看不懂... 我在家用的VS2010，我按您说的点了调试 出现这个画面   然后看不明白了 请问您能帮我解释一下吗

user: user-0
content: 引用 2 楼 anshiny 的回复:人家的代码有i++;  你的没有。 不是  是人家的没有i++，我的有 因为他的for循环后面有i++了，我用while必须在循环里面自己加 是一样的

user: user-4
content: 人家的代码有i++;  你的没有。

user: user-9
content: 点那个调试程序 ，单步跟踪，要学习分析