rt3 发表于 2020-7-31 21:26:51

C语言给字符串赋值的问题

如果 使用scanf() 或 gets() 赋值可能造成缓冲区溢出,
但是 简单的使用 fgets() 代替 又会把 '\n' 输入进去。
我知道 可以 使用 循环 ,但是 有没有 更好的办法呢。
谢谢

永恒的蓝色梦想 发表于 2020-7-31 21:26:52

本帖最后由 永恒的蓝色梦想 于 2020-8-1 13:48 编辑

楼上的效率不行,用这个:char* safe_gets(char* const _Buffer, size_t _Size) {
    if (_Buffer && _Size) {
      char* _Str = _Buffer;

      while (--_Size) {
            switch (*_Str = getchar()) {
                case EOF:
                case '\0':
                case '\r':
                case '\n':
                  goto _End;
            }

            ++_Str;
      }

    _End:
      *_Str = '\0';
    }

    return _Buffer;
}

urva 发表于 2020-7-31 21:45:18

自己写一个吧,替代fgets();
#include<string.h>
char * s_gets(char *st, int n) //只需要传递一个字符串指针和字符串长度
{
    char *temp;
    char *find_n;
    temp = fgets(st, n, stdin);
    if(temp)
       {
         find_n = strchr(temp, '\n');
          if(find_n)
            *find_n = '\0';
          else
             while(getchar()!='\n')
               continue;
       }
   return temp;
}
页: [1]
查看完整版本: C语言给字符串赋值的问题