我在将字符串(技术字符数组)作为输入时遇到问题。 假设我有以下声明:
char* s;
我必须使用此char指针输入一个字符串,直到我点击“enter”,请帮忙! 提前完成。
答案 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)
我必须使用此char指针输入一个字符串,直到我点击&#34;输入&#34;
我以为这是我的头脑,这是一个动态缓冲区,使用malloc
和realloc
使用指针。但是,它可能包含错误,但要点就在那里!除了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!