c++:在给定的字符上写一个字符*会导致segfault
c++: write a char at a given char* causes segfault
我想将一个字符复制到给定字符*指向的地址。
它在一个由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
}
相关文章:
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 如何检查一个c++字符串中有多少相同的字符/数字
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 关于字符数组,我正在尝试将数组中的每个字符分配给另一个值
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 使用动态分配将 char* 复制到另一个字符**
- 将字符向量复制到另一个向量
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 计算在同一位置至少包含一个常用字符的不同字符串对
- 如果我们在其中输入一个整数,则字符会给出整数作为输出,但是当分配给它一个整数时,这不会发生。为什么?
- 如何检查一个字符是否与字符数组中的另一个字符匹配?
- C++:使用另一个字符将一个字符大写
- 我可以得到一个字符 * 到一个 std::sregex_iterator 匹配 str() 吗?
- C ++读取用户输入的字符一个一个符号
- 遍历数组或从打开的文件中获取字符 - 一个比另一个有什么优势
- 将文本文件的内容一个字符一个字符地读入矢量,不跳过空白或新行
- 这是更快和更有效的,处理一个字符一个字符作为字符或流