鱼C论坛

 找回密码
 立即注册
查看: 2812|回复: 4

C视频51例子的问题?

[复制链接]
发表于 2011-9-20 19:26:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 ZPCG 于 2011-9-20 19:34 编辑
#include <stdio.h>
#include <string.h>

#define STR(s1, s2, s3, sum) strcat(strcat(strcat(sum, s1), s2), s3)

void main()
{
char str1[] = "I ", str2[] = "love ", str3[] = "fishc.com!", str[30] = ""; 
STR(str1, str2, str3, str);
printf("\n\tstr1 = %s\n\tstr2 = %s\n\tstr3 = %s\n\tstr = %s\n\n\n", str1, str2, str3, str);

// str[0] = 0;

STR(str2, str1, str3, str);
printf("\n\tstr1 = %s\n\tstr2 = %s\n\tstr3 = %s\n\tstr = %s\n\n\n", str1, str2, str3, str);
}
问题是在程序中char str1[] = "I ", str2[] = "love ", str3[] = "fishc.com!", str[30] = ""; 这一句:当这句中的str[29]到str[32]本程序的结果是如下图1,如果在大等于33结果就正常如图2,而且为什么是str3变化呢?

                               
登录/注册后可看大图




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
发表于 2011-9-21 00:08:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-23 10:30:13 | 显示全部楼层
本帖最后由 ZPCG 于 2011-9-23 10:30 编辑
neur2520 发表于 2011-9-21 00:08
给你调试了下,因为你第一次连接后,成功了,第2次会从第1次连接的字符串 I love fishc.com!后面继续连接, ...


但为什么是str3变化呢,能不能有详细的解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-23 11:12:55 | 显示全部楼层
我也调试了一下。。。。
str溢出。。。把str3的值给修改了。。。
str3显示"m!",并不是原来的,str3[] = "fishc.com!" ,后面两个的字符了。。
你可以把后面的那个宏拆开来调试
STR(str2, str1, str3, str);
==
strcat(str, str2);
strcat(str, str1);
strcat(str, str3);
===============
因为,结果,str3[2]=='\0',全部对字符处理的函数都是遇到'\0'(这是一个约定),就结束的!
所以,str3 显示 "m!";
str3[0]='m';
str3[1]='!';
str3[2]='\0';
str3[4]='*';//'*'为不确定值
str3[...]='*';
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
发表于 2011-9-24 22:48:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-9 06:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表