【问题标题】:Safely get string input from user including spaces [duplicate]安全地从用户那里获取字符串输入,包括空格 [重复]
【发布时间】:2014-09-07 19:49:03
【问题描述】:

我知道我可以使用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]);
}

【问题讨论】:

  • 这个问题似乎离题了,因为它表明缺乏研究。
  • 请注意,滥用strncpy() 和(尤其是)strncat() 与滥用strcpy()strcat() 一样容易。使用strncmp()strcmp() 通常是所需逻辑而非安全性的问题——它们是只读操作。如果您不知道您的数据是否在以空字符结尾的字符串中,那么没有什么是安全的。最终,如果您不知道要复制的字符串的长度,它们也不安全。使用gets() 从来都不是安全的;它不再是标准 C 的一部分,永远不应使用。

标签: c


【解决方案1】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多