太平人寿福禄倍至保费:这段代码那里错了?(C语言)

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 03:59:02
#include "string.h"
main()
{
char b[2];
strncpy(b,"aaaaa",2);
printf("%s",b);
}

正如sunnycare所演示的,字符串输出遇到结束符'/0'才中止(Ascll码为0的字符),而原程序的字符数组没有结束符所以输出会和预想结果不符。

#include "string.h"
main()
{
char b[3];
strncpy(b,"aaaaa",2);
b[2]=0;
printf("%s",b);
}

c中没有字符串变量,大家都是使用一个字符数组,让数组的最后一个元素为'\0'来表示字符串结束.

因为你只定义了char b[2],所以b可用的是b[0]和b[1],而copy两个字符'a'到b后,还要一个位来保存结束符'\0',即保存在b[2],造成了数组越界,所以程序会出错。把b定义成3个字符以上即可解决。
p.s 长度为n的字符数组可以存储n个字符,但存储字符串时只能存储长度最多为n-1的字符串,因为还要一位来保存'\0'

hinco朋友 是遇'\0',不是'/0'了!