gpt4 book ai didi

c++ - 在 Visual C++ 2008 中取消引用 char 指针时出现未处理的异常

转载 作者:太空狗 更新时间:2023-10-29 23:43:03 25 4
gpt4 key购买 nike

我正在尝试在 Visual C++ 2008 中进行一些经典的 C 开发,它将像这样修改字符串的字符:

void ModifyString(char *input)
{
// Change first character to 'a'
*input = 'a';
}

当我尝试更改角色时遇到未处理的异常。似乎我可以在 Visual Studio 6 中或使用 gcc 执行此操作,但也许我只是忘记了一些事情。 Visual Studio 是否以某种方式按值传递 char*(管理内存)。如果是这样,我该如何关闭它?

最佳答案

您可能在某处传递字符串文字:

ModifyString("oops");  // ERROR!

C 和 C++ 允许您从字符串文字(类型为 const char[])隐式转换为 char*,但这种用法已被弃用。允许在只读内存中分配字符串常量(它们通常是),因此如果您尝试修改它们,您将遇到访问冲突(也称为段错误或总线错误)。如果编译器不将字符串常量放入只读内存,程序仍然可以运行,但这是未定义的行为。

正确的做法是将字符串复制到可写缓冲区中:

// one way:
char mystring[] = "test";
ModifyString(mystring); // ok

// another way:
char mystring[64]; // make sure this is big enough!!
strcpy(mystring, "test");
ModifyString(mystring); // ok

关于c++ - 在 Visual C++ 2008 中取消引用 char 指针时出现未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1114237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com