首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C Primer Plus(七)

字符串输入 如果想把一个字符串读入程序,首先必须预留储存该字符串的空间,然后用输入函数获取该字符串。 分配空间 字符串输入,第 1 件事是分配空间,储存稍后读入的字符串。...还有一种方法是使用 C 库函数来分配内存,我们之后会详细介绍。 gets() 函数 在读取字符串时,scanf() 转换说明 %s 只能读取一个单词。...fgets() 函数的第 3 个参数指明要读入的文件。如果读入从键盘输入的数据,则以 stdin(标准输入)作为参数,该标识符定义在 stdio.h 中。... puts() 类似,也存在 fputs() 函数。fputs() 函数的第 2 个参数指明它要写入的文件。如果要显示在计算机显示器上,应使用 stdout(标准输出)作为该参数。...与 fgets() 函数不同的是: gets_s() 只从标准输入读取数据,所以不需要第 3 个参数 如果 gets_s() 读到换行符,会丢弃它而不是储存它 字符串函数 C 库提供了多个处理字符串的函数

66010

C语言常用的字符串函数及案例

ASCII C把这些函数原型放在string.h头文件中,其中最常用的有strlen()、strcat()、strcmp()、strncmp()、strcpy()、strncpy()放在stdio.h...fgets()的第一个参数跟gets函数一样,也是表示储存输入位置的地址(char*类型),第二个参数是一个整数,表示待输入字符串的大小,最后一个参数是文件指针,指定读取的文件。...注意字符串的大小字符串的长度不同。前者指改字符串占了多大内存,后者指该字符串字符的个数。特别注意fgets函数的第二个参数。...(适用于截断正在从缓存区读取中的字符串)通过fgets获取所需长度的字符串,之后通过getchar函数释放缓存区。 返回值是s_gets函数中fgets函数的返回值,判断输入是否成功。...fgets函数地区输入一直到第一个换行符的后面(’\n‘),或读到文件结尾,或者读取SYTLEN-1个字符,然后fgets函数在末尾添加一个空字符(’\0‘)使之成为一个字符串,因此循环判断while(

84510
您找到你想要的搜索结果了吗?
是的
没有找到

实际编程中避免内存越界的几种方法

使用安全的库函数 strncpy代替strcpy,定义如下: #include char *strncpy(char *dest, const char *src, int n...,反之fgets会通过第二个参数对拷贝的字符串进行限制,最多会拷贝n-1个字符并且在拷贝字符串的结尾主动加上结束符,因此在实际的编程时尽量使用fgets增强代码的健壮性。...: #include char * strncat(char *dest, const char *src, size_t n) strncpy一样,拷贝n个字符到dest中,并且在拷贝结束时自动加上结束符标识...在代码中使用宏定义可以确保缓冲区的大小需要复制的字符串的大小同步修改,从而保证长度定义的一致性。...总之,在目前的C/C++库中,安全函数非安全函数都进行了保留,在实际的编码中,大家尽量选择安全的库函数进行使用

24230

C语言常用字符串操作函数整理(详细全面)

读到文件尾或出错: NULL 描述:   fgets()在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车也做为字符串的一部分。...通过scanfgets输入一个字符串的时候,不包含结尾的“\n”,但通过fgets结尾多了“\n”。fgets()函数是安全的,不存在缓冲区溢出的问题。...strtod()函数只十进制转换,因此它值需要两个参数。   许多实现使用itoa()ftoa()函数分别把整数浮点数转换成字符串。...假设你编写的程序需要使用数值命令形参,但是命令形参数被读取为字符串。因此,要使用数值必须先把字符串转换为数字。...如果需要整数,可以使用atoi()函数(用于把字母数字转换成整数),该函数接受一个字符串作为参数,返回相应的整数值。

3.5K40

开发Windows Mobile今日插件 — 内存电量,桌面便笺,桌面记单词

自定义插件如下图所示: 一个插件就是一个位于屏幕上的窗口,每个插件负责自己的绘制对用户输入的响应。...(4)同时插件还能够向父窗口发送以下消息,辅助绘制。 TODAYM_GETCOLOR 询问系统当前使用的前景色,背景色,高亮前景色等信息。...显示隐藏输入面板,在 .NET CF中,有一个inputPanel控件,我们 可以方便的设置它的Visible属性去控制。...因此我自己用C语言写了几个API函数功能相同的读 ini 文件的函数。函数命名也是完全相同的,为了在 PC上进行测试,我在每个函数名前面加了 Ce ,系统的API函数区分开。...fgets //读取一行文本 #define t_sprintf sprintf //格式化文本 #define t_strcpy

1.1K30

C语言入坑指南-缓冲区溢出

比如,对于gets函数: char buff[255]; gets(buff); 我们不会知道用户在控制台会输入多少字符,但是可以肯定的是,输入字符很有可能会超过255,甚至字符中包含了可以执行代码的字节编码...(当然,编译器操作系统有很多机制,例如栈随机化,栈破坏检测,限制可执行代码区域等来对抗缓冲区溢出攻击),这个时候,灾难就会发生了。...因此我们不应该使用像gets这样不安全的函数,而选择fgets这样的可替代函数。查看gets函数的手册发现,手册中甚至直言不讳地说道:Never use gets()。...作用 不推荐使用函数 推荐使用函数 拷贝字符串 strcpy strncpy 字符串比较 strcmp strncmp 字符串连接 strcat strncat 格式化字符串并存入缓冲区 sprintf...snprintf 读取字符串 gets fgets 复制字符串 strdup strndup 字符串比较忽略大小写 strcasecmp strncasecmp 其中推荐使用的函数特点是,限定了操作内容的大小

1.7K30

C语言字符串从入门到进阶指南

目录 字符数组 字符串区别 字符数组  字符串  统计字符串每个字符出现的次数 字符串获取 scanf gets fgets puts fputs strlen 求非空字符串元素个数 判断字符串是否回文...字符串处理函数    字符串拷贝:   strcpy  strncpy 字符串拼接  strcat  strncat  字符串比较     strcmp  strncmp 字符串格式化输入、输出 sprintf..."); return EXIT_SUCCESS; fgets  从stdin获取一个字符串, 预留 \0 的存储空间。...参3:读取字符串的位置。    键盘 --》 标准输入:std  返回值:返回实际获取到的字符串首地址。...代码 如果输入hello world 输出hello wor int main(void) { char str[10]; printf("获取的字符串为:%s", fgets(str, sizeof

58420

经典C语言面试题

这里推荐使用标准函数fgets()代替。 2.strcpy()函数 问:下面是一个简单的密码保护功能,你能在不知道密码的情况下将其破解吗?...要避免这样的问题,建议使用 strncpy()函数。 作者注:最近的编译器会在内部检测栈溢出的可能,所以这样往栈里存储变量很难出现栈溢出。...这点非常重要,特别当程序是作为依赖于程序成功运行的脚本的一部分运行时。 4.内存泄露 问:下面的代码会导致内存泄漏吗?...如果使用atexit()就应当使用exit()或者“return”与之相配合。 7.void*C结构体 问:你能设计一个能接受任何类型的参数并返回interger(整数)结果的函数吗?...10.会改变自己名字的进程 问:你能写出一个在运行时改变自己进程名的程序吗?

2.8K50

经典C面试题

这里推荐使用标准函数fgets()取代。 2.strcpy()函数 问:以下是一个简单的password保护功能,你能在不知道password的情况下将其破解吗?...要避免这种问题,建议使用 strncpy()函数。 作者注:近期的编译器会在内部检測栈溢出的可能,所以这样往栈里存储变量非常难出现栈溢出。...这点很重要,特别当程序是作为依赖于程序成功执行的脚本的一部分执行时。 4.内存泄露 问:以下的代码会导致内存泄漏吗?...假设使用atexit()就应当使用exit()或者“return”与之相配合。 7.void*C结构体 问:你能设计一个能接受不论什么类型的參数并返回interger(整数)结果的函数吗?...10.会改变自己名字的进程 问:你能写出一个在执行时改变自己进程名的程序吗?

68710

从零开始带你一步一步使用YOLOv3测试自己的数据

strncpy(name,q,6); //注意后面的6,如果你的测试集的图片的名字字符(不包括后缀)是其他长度,请改为你需要的长度(官方的默认的长度是6) 其中,6 表示测试集图片的名字字符长度...因此,为了测试方便,建议测试集所有图片的名字字符长度最好是一致的。 3. 重新编译 修改完 detector.c 之后,回到 darknet 目录下,重新使用 make 命令进行重编译。...注意,这里可以看到每张测试集图片名字字符长度是 17,故 strncpy(name,q,17) 这样。...在 darknet 目录下,输入下面的批量测试命令: ....上一篇的训练教程加上这一篇的测试教程基本能满足大家对自己的数据集进行训练测试的需求了,赶快试一试吧~

21610

12个有趣的C语言面试题

这里推荐使用标准函数fgets()代替。 2.strcpy()函数 问:下面是一个简单的密码保护功能,你能在不知道密码的情况下将其破解吗?...要避免这样的问题,建议使用 strncpy()函数。 作者注:最近的编译器会在内部检测栈溢出的可能,所以这样往栈里存储变量很难出现栈溢出。...这点非常重要,特别当程序是作为依赖于程序成功运行的脚本的一部分运行时。 4.内存泄露 问:下面的代码会导致内存泄漏吗?...如果使用atexit()就应当使用exit()或者“return”与之相配合。 7.void*C结构体 问:你能设计一个能接受任何类型的参数并返回interger(整数)结果的函数吗?...10.会改变自己名字的进程 问:你能写出一个在运行时改变自己进程名的程序吗?

78220

gets 、getchar 、fgets 、scanf的用法

scanf遇到空格、回车Tab键都会认为输入结束,所有它不能接收空格   简单说:gets是接收一个不以’\n’结尾的字符串,getchar是接收任何一个字符(包括’\n’),fgets是接收一个...5.fgets用法 原型:fgets(buf,sizeof(s),stdin) 功能:从目标文件流 file 中读取 n-1 个字符,放入 buf 起始地址的内存空间中。...6.getsfgets区别:   每当讨论 gets 函数时,大家不由自主地就会想起 1988 年的“互联网蠕虫”,它在 UNIX 操作系统的 finger 后台程序中使用一个 gets 调用作为它的攻击方式之一...不仅如此,GCC 也不推荐使用getsputs函数。   ...stdin是标准输入(也就是键盘输入),C标准库里面的一个全局变量stdin也是FILE*类型的,因此在使用FILE*类型作为参数的地方,可以使用stdin*/ printf("%s\n%s\n",str1

3K60
领券