C++ 在C和C+中使用char*进行字符串输入+;

C++ 在C和C+中使用char*进行字符串输入+;,c++,c,string,input,C++,C,String,Input,可能重复: 我在接受字符串(从技术上讲是字符数组)作为输入时遇到了问题。 假设我有以下声明: char* s; 我必须使用这个字符指针输入一个字符串,直到我点击“回车”,请帮助! Thanx提前。第一件事是将输入输入到这个字符串中,您必须分配内存。之后,可以使用GET或FGET或SCANF< P>如果你考虑C++,CIN。GETLION()/可能有用。C/C++中的< p>可以使用 fgs< /Cuff>函数,它读取到新行的字符串。比如说 char *s=malloc(sizeof(cha

可能重复:

我在接受字符串(从技术上讲是字符数组)作为输入时遇到了问题。 假设我有以下声明:

 char* s;
我必须使用这个字符指针输入一个字符串,直到我点击“回车”,请帮助!
Thanx提前。

第一件事是将输入输入到这个字符串中,您必须分配内存。之后,可以使用GET或FGET或SCANF

< P>如果你考虑C++,CIN。GETLION()/<代码>可能有用。C/C++中的

< p>可以使用<代码> fgs< /Cuff>函数,它读取到新行的字符串。比如说

char *s=malloc(sizeof(char)*MAX_LEN);
fgets(s, MAX_LEN, stdin);
你想做什么就做什么(用C)。在C++中,代码类似

char *s=new char[MAX_LEN];
fgets(s, MAX_LEN, stdin);
C++还支持
std::string
类,它是一个动态字符序列。有关字符串库的详细信息:。如果您决定使用字符串,则可以通过以下方式读取整行内容:

std::string s;
std::getline(std::cin, s);
<> >强>查找: <代码> fGIS< /Cudio>程序,可在标题<代码> <代码>或C++ >代码> <代码>中找到。<代码> MalCal函数可以在C的代码> >代码>中找到,C++中的代码< > /代码>。最后,可以在文件
中找到带有
std::getline
函数的
std::string

建议(适用于C++):如果您不确定使用哪一种,C风格字符串还是
std::string
,根据我的经验,我告诉您string类更易于使用,它提供了更多的实用程序,而且比C风格字符串快得多。这是C++入门的一部分:


您可以使用cin>>变量名称;如果输入没有空格。对于c++

Hmmm中使用空格的gets(变量名称)输入,因为OP已声明:

我必须使用这个字符指针输入一个字符串,直到我点击“回车”

我想在我的头顶上拍摄一下,这是一个动态缓冲区,使用
malloc
realloc
使用指针。然而,它可能包含bug,但要点就在那里!撇开挑剔不谈

如果代码看起来很糟糕,则表示歉意…:)


开始填充之前,应先分配
s

1) 如果您事先不知道输入字符串的大小,可以使用
realloc

char* s = calloc(1,sizeof(char));
char t;
int len;
while(scanf("%c", &t)==1)
{
  if(t== '\n')
     break;
   len = strlen(s);
   s= realloc(s,len+1);
   *(s+len) = t;
   *(s+len+1) = '\0';
}
2) 现在,如果您事先知道输入字符串的最大长度,您可以用scanf直接将字符串读入字符数组,方法如下:

char s[256] // Let's assume that the max length of your input string is 256

scanf("%[^\r\n]",s) // this will read your input characters till you heat enter even if your string contains spaces

“C/C++”仍然不是一种语言。决定你想要哪一种,因为这两种语言在编程用户交互的惯用方式上有所不同。实际上,我在这两种语言中都面临着这个问题。我提到它的原因是C/C++:)@user1916200这两种语言的解决方案在复杂性上有很大的不同。好吧,解决方案是相似的,但不一样,所以对于这个问题,你想要哪个答案?请帮助我分别用这两种语言来做。使用它是个坏主意!使用fgets(变量、大小、标准输入)代替。是的,这是正确的。我本想添加这一点,但我错过了Dokay,我不知道字符串中会有多少个字符。我所知道的是,我必须停止处理输入,当我点击enter时,您可以使用getc一次读取一个字符,并在读取时使用realloc分配内存!!!而且还需要内存分配@马丁霍弗南德斯修好了!谢谢!:)正如我所说的——OP正在寻找的是我的头顶,并且警告过代码可能看起来很糟糕:)杀死
malloc()
,只需确保
ptr
在inception上是空的(它是空的)。@WhozCraig你的评论,最后一句话,inception?哦。确保在循环开始之前将其初始化为NULL(并且您的值为NULL,非常好)<当输入指针为空时,code>realloc()的行为类似于
malloc()
。(旁注:这是一个常见的笑话,人们可以只使用
realloc()
和预处理器宏来实现大部分C内存分配函数)。如果编译器编译使用
get
的代码,请去掉编译器。如果您知道有一个应用程序使用了
get
,那么请删除该应用程序。如果你或你认识的任何人真的推荐
获取
,(让他/她/他们)看一下。
char* s = calloc(1,sizeof(char));
char t;
int len;
while(scanf("%c", &t)==1)
{
  if(t== '\n')
     break;
   len = strlen(s);
   s= realloc(s,len+1);
   *(s+len) = t;
   *(s+len+1) = '\0';
}
char s[256] // Let's assume that the max length of your input string is 256

scanf("%[^\r\n]",s) // this will read your input characters till you heat enter even if your string contains spaces