我想将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,我实际写入的地址与我分配数据数组的地址完全相同。我已多次测试过。
提前感谢。
答案 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
}