当前位置: 代码迷 >> C语言 >> [讨论]请你给出运行结果,并说明原因
  详细解决方案

[讨论]请你给出运行结果,并说明原因

热度:108   发布时间:2006-07-18 11:00:46.0
memory address

----------------解决方案--------------------------------------------------------
我不太明白
printf("%d\n", strlen( c ) );
不是测试c的长度吗??10??为什么是随机??
printf("%d\n", x);跟c有什么关系??不是跟这句有关吗???int x=10;
----------------解决方案--------------------------------------------------------
我不太明白
printf("%d\n", strlen( c ) );
不是测试c的长度吗??10??为什么是随机??
printf("%d\n", x);跟c有什么关系??不是跟这句有关吗???int x=10;

====>
sizeof(c) equal 10

----------------解决方案--------------------------------------------------------
以下是引用论坛在2006-7-18 11:00:46的发言:
memory address


你的意思是输出的内存地址???可是它的数据和COPY的一样呀!


----------------解决方案--------------------------------------------------------
after copy string, maybe used x memory address

----------------解决方案--------------------------------------------------------
以下是引用论坛在2006-7-18 11:05:01的发言:
我不太明白

printf("%d\n", strlen( c ) );

不是测试c的长度吗??10??为什么是随机??

printf("%d\n", x);跟c有什么关系??不是跟这句有关吗???int x=10;


====>

sizeof(c) equal 10

明白了 记起来了 就是在c没负值的情况下strlen(c)是随机的是吗??
----------------解决方案--------------------------------------------------------

以下是引用wangsong在2006-7-17 21:08:38的发言:

#include<stdio.h>
#include<string.h>

int main()
{
int x = 10;
char c[10];
printf("%d\n", strlen( c ) );
strcpy( c, "1234567890987" );
printf("%d\n", x);

return 0;
}

我没试,我等下试下。
我猜 strlen(c) 的结果是 9;
x的结果 是10;
经过 strcpy(c,"1234567890987")后。c="123456789"
不知道对不对


----------------解决方案--------------------------------------------------------
以下是引用穆扬在2006-7-18 6:45:51的发言:

最严重的问题是
strcpy( c, "1234567890987" );
由于这个极其严重的错误
使得
printf("%d\n", x);
也无法确定有确定的输出


正解!
因为给字符数组c赋值的长度超过定义的长度 所以会存储时影响内存空间的分配 可能连x的空间也会占用
所以sizeof(c)是一个不确定的值,x的值当然也会变,就不一定是10了


----------------解决方案--------------------------------------------------------
  相关解决方案