c++:在给定的字符上写一个字符*会导致segfault

c++: write a char at a given char* causes segfault

本文关键字:字符 一个 segfault c++      更新时间:2023-10-16

我想将一个字符复制到给定字符*指向的地址。

它在一个由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:复制时,segfault也会出现

strncpy(data, byte, 1);

为什么会出现segfault?数据不是常量,我实际写入的地址与我分配数据数组的地址完全相同。我已经测试过很多次了。

提前谢谢。

字符串文字是只读的。如果你想要一个可修改的字符串,你必须使用一个数组,例如:
char data[10];

或者:

char *data = new char[10];

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

data被分配了一个字符串文字。字符串文字只准备好了,写入它们将导致segfault。

试试这个:

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

相反。

为什么会出现segfault?数据不是常量,我实际写入的地址与我分配数据数组的地址完全相同。

你没有分配任何东西。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
}
相关文章: