2 c++ pointers visual-studio-2008 dereference
我正在尝试在Visual C++ 2008中进行一些经典的C开发,它将修改字符串的字符,如下所示:
void ModifyString(char *input)
{
  // Change first character to 'a'
  *input = 'a';
}
当我尝试更改角色时,我遇到了未处理的异常.看起来我可以在Visual Studio 6中使用gcc或者使用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
| 归档时间: | 
 | 
| 查看次数: | 1048 次 | 
| 最近记录: |