A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小小歪 中级黑马   /  2015-7-26 23:17  /  2939 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
在C语言中输入字符串我使用gets()函数,虽然能运行但是一直报警告,求一种新的方法,我知道能自定义函数的方法,但是不是太会,请大神给个例子,求讲解

最佳答案

查看完整内容

望采纳scanf或者fgets fwrite都能替代啊 相信scanf你应该懂得,不多说 当输入字符串的时候,我们会用到gets()函数。编译时会给一个警告,所以很不爽,哈哈哈,因为gets函数在输入时没有限定字符串的长度,这是不安全的 sacnf函数和fgets都能很好的替代 scanf不多说,fgets替代gets()的话举个例子吧 char string[length]; fgets(string,length,stdin); 数组名,长度,和指针 基础视频Day 14 会讲到的 ...

12 个回复

倒序浏览
望采纳scanf或者fgets   fwrite都能替代啊
相信scanf你应该懂得,不多说   
当输入字符串的时候,我们会用到gets()函数。编译时会给一个警告,所以很不爽,哈哈哈,因为gets函数在输入时没有限定字符串的长度,这是不安全的
sacnf函数和fgets都能很好的替代
scanf不多说,fgets替代gets()的话举个例子吧
char string[length];
fgets(string,length,stdin);
       数组名,长度,和指针
基础视频Day 14 会讲到的
回复 使用道具 举报
?怎么没人啊,难道我的问题很小白?
回复 使用道具 举报
视频里不是说这个警告是默认去不掉而且不影响程序运行的吗?
回复 使用道具 举报
那就用scanf或者fwrite呗
回复 使用道具 举报
想要获得字符串,可以用scanf啊。定义一个字符数组或者字符串指针: char st[20];然后用scanf("%s",st);这样可以,等你后面学到Objective-C的时候直接用NSString * st = @"XXXXX";这样就可以了,不过得用NSLog(@"%@",st);来输出。如果觉得好请采纳哦~
回复 使用道具 举报
我只知道scanf可以代替:lol
回复 使用道具 举报
把头文件换成 #include <string.h>试试
回复 使用道具 举报
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++;
    }
}

终于把这个函数弄懂了
回复 使用道具 举报
估计你遇到的事: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()吧!
回复 使用道具 举报
好多大神!!!
回复 使用道具 举报
跟着也学习了
回复 使用道具 举报
scanf函数就可以吧,但是要注意接收的类型,然后scanf里面要对应格式。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马