这是我尝试过的代码:
void check(char*, int);
int main(){
int len;
char* str="stack over flow";
len=strlen(str);
check(str,len);
getch();
return 0;
}
void check(char* str,int len)
{
char* arr;int i=0;
arr=(char*)malloc(sizeof(char)*len);
arr="over flow stack";
while(arr[i]!='')
{
str[i]=arr[i];//here the error is thrown
i++;
}
puts(str);
}
当我尝试将arr的元素打印到str中时,我收到了错误。
答案 0 :(得分:0)
您首先使用malloc分配内存,然后您将该指针更改为指向"over flow stack"
,然后您尝试从"over flow stack"
复制字符常量字符串"stack over flow"
,它具有未定义的行为,因此程序崩溃。
答案 1 :(得分:0)
使用文字字符串不会分配任何内存 - 它会被放入程序的只读空间。你不能更新这段记忆。
为了获得记忆,你可以覆盖你可以做一些像char * str = strdup(" stack over flow");
如果检查功能中的arr长于str
,您仍然会遇到问题