黑马程序员技术交流社区
标题:
关于C语言的一个问题
[打印本页]
作者:
小小歪
时间:
2015-7-26 23:17
标题:
关于C语言的一个问题
在C语言中输入字符串我使用gets()函数,虽然能运行但是一直报警告,求一种新的方法,我知道能自定义函数的方法,但是不是太会,请大神给个例子,求讲解
作者:
xiaochongzi
时间:
2015-7-26 23:17
望采纳scanf或者fgets fwrite都能替代啊
相信scanf你应该懂得,不多说
当输入字符串的时候,我们会用到gets()函数。编译时会给一个警告,所以很不爽,哈哈哈,因为gets函数在输入时没有限定字符串的长度,这是不安全的
sacnf函数和fgets都能很好的替代
scanf不多说,fgets替代gets()的话举个例子吧
char string[length];
fgets(string,length,stdin);
数组名,长度,和指针
基础视频Day 14 会讲到的
作者:
小小歪
时间:
2015-7-27 00:39
?怎么没人啊,难道我的问题很小白?
作者:
LSwbfil2015
时间:
2015-7-27 10:36
视频里不是说这个警告是默认去不掉而且不影响程序运行的吗?
作者:
yuezuiqingfeng
时间:
2015-7-27 12:58
那就用scanf或者fwrite呗
作者:
alanwangke213
时间:
2015-7-27 13:56
想要获得字符串,可以用scanf啊。定义一个字符数组或者字符串指针: char st[20];然后用scanf("%s",st);这样可以,等你后面学到Objective-C的时候直接用NSString * st = @"XXXXX";这样就可以了,不过得用NSLog(@"%@",st);来输出。如果觉得好请采纳哦~
作者:
小林儿
时间:
2015-7-27 22:37
我只知道scanf可以代替:lol
作者:
wx_pNOonoEG
时间:
2015-7-27 22:42
把头文件换成 #include <string.h>试试
作者:
小小歪
时间:
2015-7-28 00:04
void getString(char str[], int length) {
int i = 0;
while (1) {
if (i == length - 1) {
str[i] = '\0';
break;
}
char c = getchar(); // 从缓存中获取一个字符
if (c == '\n') {
str[i] = '\0';
break;
}
str[i] = c;
i++;
}
}
终于把这个函数弄懂了
作者:
fudanxiaoan
时间:
2015-7-28 21:56
估计你遇到的事:not safe 的警告 由于gets()无法知道字符串的大小,必须遇到换行字符或文件尾才会结束输入,因此容易造成缓存溢出的安全性问题。建议使用fgets()取代#include <stdio.h>
int main(void)
{
char a;
char name[3];
char b;
scanf("%c",&a);
printf("a:%c\n",a); //第一次输出a的值
getchar();
gets(name); //这里你第一次假设读取abc 第二次读取this is text 试一下(大于3个字符的都行)
scanf("%c",&b);
printf("name:%s;\na:%c;\nb:%c;\n",name,a,b); //输出所有的值,注意a
}
由于我们把字符串改成了“this is a text”然后a的值莫名其妙的被替换了。紧接着编译器不能正常工作了。
在不正确使用gets()函数的时候造成的危害是很大的,就像我们刚才看到的那样,a的值被字符串name溢出的值给替换了。我想这并不是你想要的结果吧!出于安全,用fgets()来代替gets()吧!
作者:
1312878967
时间:
2015-7-28 23:50
好多大神!!!
作者:
QQ2544
时间:
2015-8-1 22:04
跟着也学习了
作者:
KongPro
时间:
2015-8-3 22:29
scanf函数就可以吧,但是要注意接收的类型,然后scanf里面要对应格式。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2