不能更改字符数组中的字符



根据这个问题:我什么时候应该在C中使用malloc,什么时候不使用'

使用malloc分配内存应该允许我改变数组中的一个字符。但是,这个程序在运行时崩溃。有人能给点建议吗?(free(ptr)也会导致不同的崩溃,这就是为什么它被注释掉了)。

char* ptr;
ptr = (char *)malloc(sizeof(char[10]));
ptr = "hello";
ptr[0] = 'H';
printf("The string contains: %sn", ptr);
//free (ptr);
return 0;

程序崩溃,因为这一行

ptr = "hello";

完全取消前一行malloc的效果:

ptr = malloc(sizeof(char[10])); // No need to cast to char*

,它也会在此过程中创建内存泄漏,因为malloc返回的地址在分配后不可恢复地丢失。

一旦赋值完成,尝试设置ptr[0] = 'H'会导致崩溃,因为您正在尝试修改字符串文字本身的内存-即未定义的行为。

C中的

字符串需要复制,而不是赋值,如果你以后想修改它们。用strcpy调用替换赋值来解决这个问题。

strcpy(ptr, "hello");

有几件事需要修正:

char* ptr = 0;
ptr = (char *)malloc(sizeof(char)*10);
if(!ptr)
    return 0; // or something to indicate "memory allocation error"
strcpy(ptr, "hello");
ptr[0] = 'H';
printf("The string contains: %sn", ptr);
free (ptr);
return 0;

在main()

中编译并正确运行

相关内容

  • 没有找到相关文章

最新更新