#include<stdio.h>
#include<malloc.h>
int main()
{
char *string1;
int length;
scanf("%d", &length);
string1 = (char *)malloc(sizeof(char) * length);
printf("\n Enter the First String : ");
fgets(string1, length, stdin);
printf("\n The First String : %s ",string1);
free(string1);
return 0;
}
有人可以帮我解决上述代码吗?我试图获取字符串的长度和字符串作为输入。但是,我只能输入字符串的长度。之后它会跳过字符串输入部分。
这是我得到的输出:
sh-4.3$ main
10
Enter the First String :
The First String :
sh-4.3$
答案 0 :(得分:1)
输入"10<enter>"
后,<enter>
或"\n"
将保留在。{
stdin缓冲区,因此您必须在getchar()
之后使用scanf
删除它。
此外,您应该#include <stdlib.h>
而不是malloc.h。
由于0终结符,你malloc
1个字符太少了。
string1 = malloc(length + 1);
将完成这项工作,演员不会
必要且sizeof(char)
始终为1。
答案 1 :(得分:0)
如果您需要使用stdin
进行字符串输入,可以使用fgetln
。我编辑了你的例子,现在它看起来像那样:
#include<stdio.h>
#include <stdlib.h>
int main()
{
char *string1;
size_t length;
//scanf("%d", &length);
//string1 = (char *)malloc(sizeof(char) * length);
printf("\n Enter the First String : ");
//fgets(string1, length, stdin);
string1 = fgetln(stdin, &length);
string1[length] = '\0';
printf("\n The First String : %s ",string1);
free(string1);
return 0;
}
注意:fgetln不返回C字符串,您应该在末尾添加一个NULL字符。
答案 2 :(得分:0)
使用换行符等从STDIN /键盘读取时最简单的答案 只是将“\ n”添加到scanf,即:
scanf("%d\n", &length);
解决问题;)
PS:注意scanf
的所有其他安全/缓冲区溢出问题