鱼C论坛

 找回密码
 立即注册
查看: 899|回复: 2

[已解决]字符串处理函数求助

[复制链接]
发表于 2020-11-19 19:42:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
下面的程序有什么问题


#include <stdio.h>
#include <string.h>

int main()
{
        char str[10];

        strncat(str, "I love FishC.com!", sizeof(str));

        return 0;
}


答案 :不当使用 C 标准库中的 strncat 函数常常会导致差一错误(差一错误是指在计数时由于边界条件判断失误导致结果多了一或少了一的错误)和安全问题。

程序员经常认为 strncat 函数在写入字符串结束符时不会超过最大长度。事实上 strncat 函数会在指定的最大长度之后一字节的位置写入字符串结束符。

上边代码应该改为:strncat(str, "I love FishC.com!", sizeof(str)-1)

问题 : str数组最大长度为10,而后面的字符串明显超过10的长度,设定连接字符的个数为-1还是超限了,那这有什么意义呢?
最佳答案
2020-11-19 22:43:11
答案的解释就是告诉你,对于字符数组,需要开辟的单元要适当地多,程序的数组如果赋值

char str[10] = "programing"; 语句肯定是错误的!programing 就是 10 个字符了,赋值完成后的结束符没有位置写了,于是报错,应修改为:char str[11] = "programing"; 或者 :char str[10] = "programin";

明白了这个道理,所给出的的程序若不修改,直接报错:"const char [11]" 类型的值不能用于初始化 "char [10]" 类型的实体;若修改为 sizeof(str) - 1,程序运行输出:I love Fi
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-19 19:43:20 | 显示全部楼层
表示没看懂这道题要干嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-19 22:43:11 | 显示全部楼层    本楼为最佳答案   
答案的解释就是告诉你,对于字符数组,需要开辟的单元要适当地多,程序的数组如果赋值

char str[10] = "programing"; 语句肯定是错误的!programing 就是 10 个字符了,赋值完成后的结束符没有位置写了,于是报错,应修改为:char str[11] = "programing"; 或者 :char str[10] = "programin";

明白了这个道理,所给出的的程序若不修改,直接报错:"const char [11]" 类型的值不能用于初始化 "char [10]" 类型的实体;若修改为 sizeof(str) - 1,程序运行输出:I love Fi
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表