C++ 这段代码在c++;?I';我们必须使用c字符串
我已经创建了一个c字符串数组。此代码接受三个字符串的输入,然后将其显示在控制台上。 但不幸的是,输入正常,但输出显示不工作C++ 这段代码在c++;?I';我们必须使用c字符串,c++,c-strings,C++,C Strings,我已经创建了一个c字符串数组。此代码接受三个字符串的输入,然后将其显示在控制台上。 但不幸的是,输入正常,但输出显示不工作 int main() { char *str[20]; std::cout << "Enter values to strings: "; for (int i = 0; i < 3; i++) { std::cout << "\nstr" <<
int main()
{
char *str[20];
std::cout << "Enter values to strings: ";
for (int i = 0; i < 3; i++)
{
std::cout << "\nstr" << i<<": ";
std::cin >> str[i];
}
std::cout << "\n\n\nouput:";
for (int i = 0; i < 3; i++)
{
std::cout << "\nstr" << i<<":";
std::cout << str[i];
}
return 0;
}
intmain()
{
char*str[20];
std::cout如注释中所述,如果您需要使用C字符串(即,您不能使用std::string
,我通常会推荐使用),则使用未初始化的指针是,只需使用运算符new
为C字符串分配内存。一种可能的方法是定义预期输入字符串的某个常量最大长度,将输入读取到缓冲区,然后分配必要的内存并将数据复制到新分配的空间:
#include <iostream>
#include <cstring>
constexpr int MAX_STR_LEN = 255;
int main()
{
char *str[20];
char buff[MAX_STR_LEN]; // going to read strings here and copy them to `str` array
std::memset(buff, 0, MAX_STR_LEN); // fill the buffer with zeroes
std::cout << "Enter values to strings: ";
for (int i = 0; i < 3; i++)
{
std::cout << "\nstr" << i<<": ";
std::cin >> buff;
str[i] = new char[std::strlen(buff)+1]; // +1 for terminating null
std::memcpy(str[i], buff, std::strlen(buff));
str[i][std::strlen(buff)] = 0; // last character should be null
}
std::cout << "\n\n\nouput:";
for (int i = 0; i < 3; i++)
{
std::cout << "\nstr" << i<<":";
std::cout << str[i];
delete[] str[i];
}
return 0;
}
#包括
#包括
constexpr int MAX_STR_LEN=255;
int main()
{
char*str[20];
char buff[MAX_STR_LEN];//在此处读取字符串并将其复制到'STR'数组
std::memset(buff,0,MAX_STR_LEN);//用零填充缓冲区
std::cout如注释中所述,如果您需要使用C字符串(即,您不能使用std::string
,我通常会推荐使用),则使用未初始化的指针是,只需使用运算符new
为C字符串分配内存。一种可能的方法是定义预期输入字符串的某个常量最大长度,将输入读取到缓冲区,然后分配必要的内存并将数据复制到新分配的空间:
#include <iostream>
#include <cstring>
constexpr int MAX_STR_LEN = 255;
int main()
{
char *str[20];
char buff[MAX_STR_LEN]; // going to read strings here and copy them to `str` array
std::memset(buff, 0, MAX_STR_LEN); // fill the buffer with zeroes
std::cout << "Enter values to strings: ";
for (int i = 0; i < 3; i++)
{
std::cout << "\nstr" << i<<": ";
std::cin >> buff;
str[i] = new char[std::strlen(buff)+1]; // +1 for terminating null
std::memcpy(str[i], buff, std::strlen(buff));
str[i][std::strlen(buff)] = 0; // last character should be null
}
std::cout << "\n\n\nouput:";
for (int i = 0; i < 3; i++)
{
std::cout << "\nstr" << i<<":";
std::cout << str[i];
delete[] str[i];
}
return 0;
}
#包括
#包括
constexpr int MAX_STR_LEN=255;
int main()
{
char*str[20];
char buff[MAX_STR_LEN];//在此处读取字符串并将其复制到'STR'数组
std::memset(buff,0,MAX_STR_LEN);//用零填充缓冲区
std::coutstr
是一个由20个未初始化指针组成的数组。将这些指针用于任何对象都是未定义的。您需要为字符串创建空间。(由于您“必须”使用C字符串,因此您应该已经知道执行此操作的方法。)您发布的代码无法编译。请张贴包含输入、输出和预期输出的读取和良好的信息。从现有的C++开源软件(例如……)中获取灵感。您想使用并且可能会使用。使用g++-Wall-Wextra-g
编译。然后使用调试器了解程序的行为。对于无法使用std::string
和C_str()的C字符串,您需要做些什么
method?str
是一个由20个未初始化指针组成的数组。使用这些指针进行任何操作都是未定义的。您需要为字符串创建空间。(因为您“必须”使用C字符串,所以您应该已经知道执行此操作的方法。)您发布的代码无法编译。请张贴包含输入、输出和预期输出的读取和良好的信息。从现有的C++开源软件(例如……)中获取灵感。您想使用并且可能会使用。使用g++-Wall-Wextra-g
编译。然后使用调试器了解程序的行为。对于无法使用std::string
和C_str()的C字符串,您需要做些什么
method?您通常仍然可以创建std::string
,即使您必须将它们作为C字符串发送到C库。std::string
内部必须将该字符串存储为C字符串(从C++11开始),并为此提供C_str()<代码> >访问此内部字符串作为<代码> char */COD>。我们仍然应该在C++代码中更喜欢<代码> STD::String 并按照您通常推荐的方式执行。@ NigoLasdUSATAR> <代码> STD::String 已经有<代码> CyString()
早在C++11之前就开始考虑C兼容性。只有内部存储在C++11中被标准化,这是大多数实现已经使用过的做法。@RemyLebeau是的,这就是我的意思。可能措辞不够准确。但是内部存储要求强制了兼容性。我们现在可以发送一个非Constchar*
打算由C库填充(考虑到我们需要resize()
之后的std::string
来匹配新的内部长度)在C++ 11之前,这是不规范的。自从C++ 11以来,我没有看到任何用例,我们不能在C++中使用<代码> STD::String 。通常,你仍然可以创建<代码> STD::String 。即使你必须把它们作为C字符串发送到C库。<代码>:ST::String 内部必须将字符串存储为C字符串(因为C++ 11)。为此,提供了<代码> CyString()/Case>方法来访问该内部字符串作为<代码> char */COD>。我们仍然应该在C++代码中更喜欢<代码> STD::String 并按照您通常推荐的方式执行。@ NigoLasdUSATAR> <代码> STD::String 已经有<代码> CyString()
早在C++11之前就开始考虑C兼容性。只有内部存储在C++11中被标准化,这是大多数实现已经使用过的做法。@RemyLebeau是的,这就是我的意思。可能措辞不够准确。但是内部存储要求强制了兼容性。我们现在可以发送一个非COnSt>代码> char */COD>要由C库填充(给定我们需要<代码> Resiz())/<代码> <代码> STD::String < /代码>匹配新的内部长度(在C++ 11之前没有标准化)。因为C++ 11,我没有看到任何用例,我们不能在C++侧使用<代码> STD::String 。