|  | 
 
| 
下面的程序有什么问题
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还是超限了,那这有什么意义呢?
 
答案的解释就是告诉你,对于字符数组,需要开辟的单元要适当地多,程序的数组如果赋值
 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
 | 
 |