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

时间:2014-09-07 19:49:03

标签: c

我知道我可以使用gets(char *)从包含空格的用户那里获取字符串输入,但我读到了缓冲区溢出问题。使用strcpystrcmp(以及其他一些函数)并不安全,我们应该使用strncpystrncmp并明确提及输入的大小。 Stack Overflow上的一些人告诉我。所以,我担心使用gets来获取用户的输入还是安全的?如果安全告诉我,我将继续使用它。如果没有,那么另一种方法是从用户安全地获得间隔字符串输入?

#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]);
}

1 个答案:

答案 0 :(得分:-2)