C语言给字符串赋值的问题
如果 使用scanf() 或 gets() 赋值可能造成缓冲区溢出,但是 简单的使用 fgets() 代替 又会把 '\n' 输入进去。
我知道 可以 使用 循环 ,但是 有没有 更好的办法呢。
谢谢 本帖最后由 永恒的蓝色梦想 于 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;
} 自己写一个吧,替代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]