最近遇到一个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~