贴上代码:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void main()
{
char *buf = NULL;
const char *str = " i am student, you are teacher ";
buf = (char *)malloc(sizeof(str) * 2);
memset(buf, 0, sizeof(buf));
strcpy(buf, str);
printf("buf:%s \n", buf);
free(buf);
buf = NULL;
}
编译器使用的是微软visual studio 2012版本.
问题:printf打印的时候总是触发断点,进入到malloc.c文件的_heap_alloc(size_t size)函数中.个人感觉buf指针作为堆上内存空间的指针,在strcpy函数之前buf指针并没有改动,问题可能出现在strcpy方面,求大神帮忙解答!!!!!
这里分配空间,就有问题了吧,str是指针,sizeof(str)的值为4,哪怕乘以2也只有8个字节,而字符串显然不止8个字节。
sizeof(str)是个什么鬼,这个应该只有4个字节吧,应该是strlen(str)吧,
是的,找到问题了
@匡吉:
#include <stdio.h>
int main(){
char buff[5] ={'a','b','c','d','f'};
printf("%d\n",sizeof(buff));
}
像这种写法才可以
@_Roy: 我弄混了指针变量和内存空间变量的区别,指针变量不是具体的内存空间.