c ++:在给定的char *处写入char会导致段错误

问题描述

|| 我想将一个char复制到给定char *指向的地址。 它在main调用的函数中:
char data = \"       \";
myfunction(data,somethingelse);
...
在功能内部我有类似的东西
void myfunction(char* data,short somethingelse) {
...
char byte = 0;
inputfilestream.read(&byte,1);
*data = byte; // here i get the segfault
data++;
...
}
当我使用strncpy复制到副本时,段错误也会出现:
strncpy(data,byte,1);
为什么会有段错误? data不是常量,我实际写入的地址与我分配数据数组的地址完全相同。我已经多次测试了。 提前致谢。     

解决方法

        字符串文字是只读的。如果您想使用可修改的字符串,则必须使用一个数组,例如:
char data[10];
要么:
char *data = new char[10];
详细说明一下:字符串文字的类型实际上是
const char*
。因此,将字符串文字分配给非常量
char*
在技术上是无效的,但是大多数编译器出于遗留原因仍允许这样做。当您尝试这样做时,许多现代编译器至少会发出警告。     ,        
data
被分配了字符串文字。字符串文字仅准备就绪,对其进行写入将导致段错误。 尝试这个:
char data[10]; // or whatever size you want.
代替。     ,           为什么会有段错误? data不是常量,我实际写入的地址与我分配数据数组的地址完全相同。 您什么都没分配。
char *data = \"         \";
甚至不应该在C ++中编译。您正在将常量字符串分配给非常量。     ,        
char byte = 0;
inputfilestream.read(&byte,1);
*data = byte; // here i get the segfault
data++; // << How many times?
没问题
#include <stdio.h>

int main(int argc,char **argv)
{
    char *data = \"Yello\"; // or char data[] = \"Yello\";
    *data = \'H\';
    puts(data); // Hello
}
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...