c语言 strlen的问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 08:14:47
#include <stdio.h>
#include <string.h>
void main()
{
int i,x;
int a[26];
char b[30][4]={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..","..--",".-.-","---.","----"};
for (i=0;i<26;i++)
a[i]=65+i;
for (i=0;i<30;i++)
{x=strlen(&b[i][0]);
printf("%d\n",x);
}

}

为什么输出的并不是每一个b[i]的真实长度。。。都出来好几十的数字了。。
应该怎么改才能输出正确的字符串长度

"----" 这样的字符串,由于长度为4,加上末尾一个 '\0',需要 char[5] 才能容纳

相对安全的赋值方式是改成:
char b[30][] = ....

看这个就明白了:
char b[] = "aaaa";
strlen(b); // 4
sizeof(b); // 5

原来的写法,gcc 是会报错的
你用的什么编译器?很糟糕啊
它忽略这个错误的结果,就是把 b[1] 和 b[2]。。。等等,在实际内存中连在一起了,没有存储 '\0',字符串自然就超长了

换一个标准的编译器吧

#include <stdio.h>
#include <string.h>
void main()
{
int i,x;
int a[26];
char b[30][100]={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..","..--",".-.-","---.","----"