c ++:在给定的char *中写一个char导致segfault

时间:2011-06-12 09:31:20

标签: c++ char segmentation-fault

我想将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不是const,我实际写入的地址与我分配数据数组的地址完全相同。我已多次测试过。

提前感谢。

4 个答案:

答案 0 :(得分:7)

字符串文字是只读的。如果需要可修改的字符串,则必须使用数组,例如:

char data[10];

或者:

char *data = new char[10];

详细说明:字符串文字的类型实际上是const char*。因此,将字符串文字分配给非const char*在技术上是无效的,但大多数编译器仍然会因遗留原因而允许它。当你尝试这样做时,许多现代编译器至少会发出警告。

答案 1 :(得分:3)

data被分配了一个字符串文字。字符串文字是只读的,写入它们会导致段错误。试试这个:

char data[10]; // or whatever size you want.

代替。

答案 2 :(得分:0)

  

为什么会出现段错误? data不是const,我实际写入的地址与我分配数据数组的地址完全相同。

你没有分配任何东西。 char *data = " ";甚至不应该用C ++编译。您将常量字符串分配给非常量。

答案 3 :(得分:0)

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
}