在C和C ++中使用char *获取字符串输入

时间:2012-12-24 14:45:38

标签: c++ c string input

  

可能重复:
  Reading string from input with space character?

我在将字符串(技术字符数组)作为输入时遇到问题。 假设我有以下声明:

 char* s;

我必须使用此char指针输入一个字符串,直到我点击“enter”,请帮忙! 提前完成。

6 个答案:

答案 0 :(得分:8)

在C和C ++中,您可以使用fgets函数,该函数读取直到新行的字符串。例如

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类,它是一个动态的字符序列。有关字符串库的更多信息:http://www.cplusplus.com/reference/string/string/。如果您决定使用字符串,那么您可以通过编写以下内容来阅读整行:

std::string s;
std::getline(std::cin, s);

在哪里找到fgets程序可以在标题<string.h>找到,或<cstring>找到C ++。 malloc函数可以在<stdlib.h>找到C,<cstdlib>找到C ++。最后,std::string类具有std::getline功能,可在文件<string>找到。

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

As is happens, on average, the string class implementation executes considerably
faster than the C-style string functions. The relative average execution times on
our more than five-year-old PC are as follows:

    user            0.4   # string class
    user            2.55  # C-style strings

答案 1 :(得分:2)

首先,要将输入输入到此字符串中,您必须分配内存。之后,您可以使用gets或fgets或scanf

答案 2 :(得分:1)

如果您考虑使用C ++,cin.getline()可能会有用。

答案 3 :(得分:1)

您可以使用cin&gt;&gt; variable_name;如果输入没有空间。对于带空格的输入,在c ++中使用gets(variable_name)

答案 4 :(得分:0)

在开始填写之前应该分配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数组:

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

答案 5 :(得分:-1)

嗯,因为OP已声明:

我必须使用此char指针输入一个字符串,直到我点击&#34;输入&#34;

我以为这是我的头脑,这是一个动态缓冲区,使用mallocrealloc使用指针。但是,它可能包含错误,但要点就在那里!除了Nitpicky ......

如果代码看起来很糟糕,请道歉... ::)

char *ptr = NULL, *temp_ptr = NULL;
int c = 0, chcount = 0, enter_pressed = 0;
do{
   c = fgetc(stdin);
   if (c != '\n' || c != -1){
     chcount++;
     if (ptr == NULL){
         ptr = malloc(sizeof(char) + chcount + 1);
         if (ptr != NULL) ptr[chcount] = c;
         else printf("ABORT!\n");
     }else{
         temp_ptr = realloc(ptr, chcount + 1);
         if (temp_ptr != NULL){
            ptr = temp_ptr;
            ptr[chcount] = c;
         }else{
            // OK! Out of memory issue, how is that handled?
            break;
         }
     }
   }else{
      enter_pressed = 1;
   }
}while (!enter_pressed);
ptr[chcount] = '\0'; // nul terminate it!