如何在C++中使用字符串?
我需要在不事先知道有多少字符串的情况下读取一组字符串,并在读取时打印它们。所以我决定用while!FEOFTSIN作为EOF指示器。以下是我的代码:如何在C++中使用字符串?,c++,linux,C++,Linux,我需要在不事先知道有多少字符串的情况下读取一组字符串,并在读取时打印它们。所以我决定用while!FEOFTSIN作为EOF指示器。以下是我的代码: #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; int main(void) { char* str; std::cout<<"\nEnter strings:";
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
int main(void)
{
char* str;
std::cout<<"\nEnter strings:";
while(!feof(stdin))
{
std::cin>>str;
std::cout<<"\nThe string you entered is"<<str;
}
return 0;
}
由于某种原因,上面的代码在我输入第一个字符串后表示分段错误。是否有人可以建议对此进行修复。str是指向char的指针。当你尝试在那里写的时候,它不会指向任何有效的地方
尝试C++中的一些新形式,或者,更好的是,既然你正在编码C++,那么使用STD::String。
< P> STR是指向char的指针。当你尝试在那里写的时候,它不会指向任何有效的地方尝试C++中的一些新形式,或者,更好的是,既然你正在编码C++,那么使用STD::String。
STR被声明为char *STR,这意味着它不是真正的字符串,只是指针,未初始化的BTW,并且不分配任何空间。这就是为什么它是塞格弗茨。由于你在C++中编程,你可以使用< /P>
std::string str;
它会起作用的。别忘了包括。str被声明为char*str,这意味着它实际上不是一个字符串,只是指向它的一个指针,未初始化,并且没有为它分配任何空间。这就是为什么它是塞格弗茨。由于你在C++中编程,你可以使用< /P>
std::string str;
它会起作用的。别忘了包括在内
我们应该这样做
如果要执行此操作,则需要为正在读取的字符串分配一些内存 目前,您所拥有的只是堆栈上指向某个随机内存区域的指针,这意味着当您读取字符时,它们会在其他数据,甚至是不允许写入的内存上跺脚,从而导致segfault 尝试分配一些内存的问题是,在读取字符串之前,您不知道要分配多少内存。。。你可以说300个字符,看看是否足够。但如果不是这样的话,您也会遇到同样的数据损坏问题
最好使用C++ STD::string类型。
,您需要为正在读取的字符串分配一些内存。p> 目前,您所拥有的只是堆栈上指向某个随机内存区域的指针,这意味着当您读取字符时,它们会在其他数据,甚至是不允许写入的内存上跺脚,从而导致segfault 尝试分配一些内存的问题是,在读取字符串之前,您不知道要分配多少内存。。。你可以说300个字符,看看是否足够。但如果不是这样的话,您也会遇到同样的数据损坏问题最好使用C++ STD::string类型。
< P>一个分割错误发生在应用程序试图访问它不允许的内存位置时。在您的例子中,问题是您正在解引用一个未初始化的指针:char*str 一种可能的解决方案是更改指向数组的指针,使其具有合适的大小 这样的事情可能就足够了:#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
int main(void)
{
char str[20];
cout<<"\nEnter strings:";
while(!feof(stdin))
{
cin.width(20); //set a limit
cin>>str;
cout<<"\nThe string you entered is"<<str;
}
return 0;
}
当应用程序试图访问不允许的内存位置时,会发生分段错误。在您的例子中,问题是您正在解引用一个未初始化的指针:char*str 一种可能的解决方案是更改指向数组的指针,使其具有合适的大小 这样的事情可能就足够了:
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
int main(void)
{
char str[20];
cout<<"\nEnter strings:";
while(!feof(stdin))
{
cin.width(20); //set a limit
cin>>str;
cout<<"\nThe string you entered is"<<str;
}
return 0;
}
这不是C,它是C++。你需要用C或C++来做吗?差别是巨大的!嗨,弗雷迪克,谢谢你的标签编辑!这不是C,它是C++。你需要用C或C++来做吗?差别是巨大的!嗨,弗雷迪克,谢谢你的标签编辑!与此同时,人们正在与让缓冲区溢出发生的坏程序员进行斗争。我建议使用getline函数。正如@wormsparty所说的,还有while!std::cin.eof不是读取流中所有内容的正确方法。@wormsparty是的,我一直在等待有人发布无处不在的getline版本,但没有人发布,奇怪的是……与此同时,人们正在与让缓冲区溢出发生的坏程序员进行斗争。我建议使用getline函数。正如@wormsparty所说的,还有while!std::cin.eof不是读取流中所有内容的正确方法。@wormsparty是的,我一直在等待有人发布无处不在的getline版本,但没有人发布,奇怪。。。