C 安全地从用户处获取字符串输入,包括空格

C 安全地从用户处获取字符串输入,包括空格,c,C,我知道我可以使用gets(char*)从包含空格的用户那里获取字符串输入,但我看到了缓冲区溢出问题。使用strcpy,strcmp(和一些其他函数)是不安全的。我们应该使用strncpy,strncmp,并明确说明输入的大小。Stack Overflow的人告诉我的。所以,我担心使用get从用户那里获取输入,还是安全?如果安全的话,告诉我我会继续使用。如果不是,那么从用户安全地获得间隔字符串输入的另一种方法是什么 #include <stdio.h> #include <st

我知道我可以使用
gets(char*)
从包含空格的用户那里获取字符串输入,但我看到了缓冲区溢出问题。使用
strcpy
strcmp
(和一些其他函数)是不安全的。我们应该使用
strncpy
strncmp
,并明确说明输入的大小。Stack Overflow的人告诉我的。所以,我担心使用
get
从用户那里获取输入,还是安全?如果安全的话,告诉我我会继续使用。如果不是,那么从用户安全地获得间隔字符串输入的另一种方法是什么

#include <stdio.h> 
#include <stdlib.h> 

int main()
{
  char *a[2]; 

  char b[] = "first";
  char c[] = "second"; 

  int s1; //,s2;

 // printf("\nLong you want your %s string to be: \n",b);
 //scanf("%d",&s1); fflush(stdin);

 //printf("\nLong you want your %s string to be: \n",c);
 // scanf("%d",&s1); fflush(stdin);

  int i;
  for(i=0; i<2; i++) {
    printf("\nLong you want your %s string to be: \n",b);
    scanf("%d",&s1);  fflush(stdin); 
    a[i] = (char *) malloc(s1*sizeof(char)); 
  }

  printf("\nEnter the first string: \n");
  scanf("%s", a[0]); fflush(stdin);

  printf("\nEnter the second string: \n");
  scanf("%s", a[1]); fflush(stdin);

  printf("\nThe first string is: %s\n", a[0]);
  printf("\nThe second string is: %s\n", a[1]);
}
#包括
#包括
int main()
{
char*a[2];
字符b[]=“第一”;
字符c[]=“秒”;
int s1;/,s2;
//printf(“\n您希望%s字符串为:\n”,b);
//scanf(“%d”和&s1);fflush(stdin);
//printf(“\n您希望%s字符串为:\n”,c);
//scanf(“%d”和&s1);fflush(stdin);
int i;

对于(i=0;i请做一些研究..这可能会对你有所帮助。

这个问题似乎是离题的,因为它显示了研究的不足。请注意,滥用
strncpy()
和(特别是)
strncat()
与滥用
strcpy()
一样容易
通常是所需逻辑的问题,而不是安全性的问题-它们是只读操作。如果您不知道数据是否在以null结尾的字符串中,则没有什么是安全的。最终,如果您不知道要复制的字符串的长度,则它们也不安全。使用
get()
永远都不安全;它不再是标准C的一部分,不应使用。