我需要在事先不知道有多少字符串的情况下读取一堆字符串,并在读取时打印它们。所以我决定使用 while(!feof(stdin))
作为 EOF 指标。这是我的代码:
#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;
}
由于某种原因,上面的代码在我输入第一个字符串后显示段错误
。有人可以建议解决这个问题吗。
最佳答案
您需要为正在读取的字符串分配一些内存。
你目前所拥有的只是堆栈上指向某个随机内存区域的指针,这意味着当你读取字符时,它们会踩到其他数据,甚至是你不允许写入的内存——这会导致段错误。
尝试分配一些内存的问题在于,在读入字符串之前,您不知道要分配多少...(您可以只说“300 个字符”,看看是否足够。但如果不够'你有同样的数据损坏问题)
最好使用 C++ std::string
类型。
关于c++ - 如何在 C++ 中读取一堆字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7346906/