最近遇到一个strlen问题。
程序代码如下:
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]){
int i;
char a[1] = {'c'};
for (i = 0; i <= strlen(a) - 2; i++)
{
printf("i = %d; (strlen(a)-2) = %d;\n", i, (strlen(a) - 2));
}
return 0;
}
windows平台下输出结果:
strlen为什么不等于1?
原因在strlen在实现时,遇到第一个0x00即终止.
而char a[1] = {'a'};明显是没有以0x00结尾;修改代码
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]){
int i;
char a[2] = {'c', 0x00};
//char a[2] = {'c','\0'}; //OK
printf("strlen(a) = %d;\n", strlen(a));
printf("(strlen(a)-2) = %d;\n", (strlen(a) - 2));
for (i = 0; i <= strlen(a) - 2; i++)
{
printf("i = %d; (strlen(a)-2) = %d;\n", i, (strlen(a) - 2));
}
return 0;
}
输出结果:
一切OK~