Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在动态字符*缓冲区上使用strcpy_C++ - Fatal编程技术网

C++ 如何在动态字符*缓冲区上使用strcpy

C++ 如何在动态字符*缓冲区上使用strcpy,c++,C++,使用strcpy(SIGSEGV(QT-Linux))分配动态缓冲区数据时遇到问题 我应该如何正确地存储数据? 这只是为了获取知识,所以不需要字符串示例。您实际上没有为数据[current]中的指针分配内存,从而导致未定义的行为(UB的一个可能结果是,有时它似乎工作正常) 分配内存并将其分配给指针,或者改用std::string(这是我的建议) 在现代C++中,使用这些指针的原因很小,尤其是字符串。使用指针只会产生像你现在这样的问题,甚至更多。使用std::string还意味着,如果用户输入的

使用strcpy(SIGSEGV(QT-Linux))分配动态缓冲区数据时遇到问题

我应该如何正确地存储数据?
这只是为了获取知识,所以不需要字符串示例。

您实际上没有为
数据[current]
中的指针分配内存,从而导致未定义的行为(UB的一个可能结果是,有时它似乎工作正常)

分配内存并将其分配给指针,或者改用
std::string
(这是我的建议)



在现代C++中,使用这些指针的原因很小,尤其是字符串。使用指针只会产生像你现在这样的问题,甚至更多。使用
std::string
还意味着,如果用户输入的字符串长度超过19个字符,则不会有缓冲区溢出的风险。

您正在取消对未分配内存的指针的引用

 char ** data = new char *[10];
 strcpy( data[ current++ ],  temp); //works
数据[current++]
指向未分配的内存


代码的另一个问题是无法控制的strcpy和cin读取。您无法保证用户输入是否适合缓冲区。

您已经分配了字符指针数组。您需要为每个字符串分配内存,如下所示:

char * dynamicTemp = new char [ 20 ];
std::cin >> dynamicTemp;
data[ current++ ]  = new char [ 20 ];
strcpy( data[ current ], dynamicTemp );

char**data=new char*[10]
char*
分配了10个指针,但每个指针都指向一个随机位置。因此,即使是
strcpy(数据[current++],temp)不工作。@ USE181008:这不是C++吗?代码>新的<代码>只能在C++中使用。你必须使用C数组吗?@ NaNaLover抱歉,我没有看到<代码> STD::CIN < /C>和<代码>新< /Cord>……“//Works”的行实际上不工作,它是未定义的。直到后来才显示任何症状是未定义行为的一个例子。这就是我想要的,只是
data[current]=new char[strlen(temp)];strcpy(数据[current++],数据)这是我使用的方式。
char * dynamicTemp = new char [ 20 ];
std::cin >> dynamicTemp;
data[ current++ ]  = new char [ 20 ];
strcpy( data[ current ], dynamicTemp );