VC++下的字符指针长度问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 19:28:23
VC下代码如下:
char *s;
char *str = "123456789";
s = (char *) malloc(sizeof(char));
int n = strlen(s);
调试是n = 16 这是为什么啊?
还有把s分配后指向NULL既s = NULL 这时 n = strlen(s) n = 0
但运行 s = strcpy(s, str);后在 n = strlen(s) n还是等于16

我现在就30分了 全贡献出来了 求大虾指教
三楼的 我原先也是认为s = strcpy(s, str); 出错,但运行后却没有出错 我正纳闷着
还有我在不同的时候在不同的程序里s = (char *) malloc(sizeof(char));
int n = strlen(s);
n还是16......

还有楼下的 我的情况也和你相似 我的是在vs2005下编译 运行后出错然后强制结束 BC6下也是如此

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

int main(void)
{
char *s;
char *str = "123456789";
s = (char *) malloc(sizeof(char));
int n = strlen(s);
printf("%d\n",n);
s = NULL;
s = strcpy(s, str);
n = strlen(s);
printf("%d\n",n);
return 0;
}
在VC6下不能正常执行结束,CPU占用100%
在G++下出内存错误。

把s = NULL;去掉,VC6的结果是3,9
G++的结果是0,9

没有必要研究这种问题,和编译器有关系,并且这是一种不好的编程风格,很容易引起内存错误。

s = (char *) malloc(sizeof(char));
只给s分配了1个字节。sizeof(char))=1
s = (char *) malloc(sizeof(char));
int n = strlen(s);
s没有内容却去测量它的字符串长度~~~
别说n=16任何值都有可能,因为strlen是靠null结尾的字符串工作的。
s = strcpy(s, str);
s只有一个字节,你却向s写入9个字节,大错啊!
msdn对strlen和strcpy函数解释
strlen:returns the number of characters in str, excluding the terminal NULL
strcpy:The strcpy function copies strSource, including th