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的一部分,不应使用。