纠结的问题
- C/C++ code
#include <stdio.h>#include <stdlib.h>int main(){ char from[] = {'1','2'}; char to[] = {'1','2'}; int fromLength = (int)(sizeof(from) / sizeof(char)); int toLength = (int)(sizeof(to) / sizeof(char)); printf("%d\n", fromLength); printf("%d\n", toLength); substrVersion1(from, to);}int substrVersion1(char dst[], char src[]){ int dstLength = (int)(sizeof(dst) / sizeof(char)); int srcLength = (int)(sizeof(src) / sizeof(char)); printf("%d\n", dstLength); printf("%d\n", srcLength);}
结果:
2
2
4
4
这谁能解释下。
[解决办法]
前面是数组长度
from[]和to[]都含有两个元素,也就是2
char类型占有一个字节,sizeof(char)就是1
后面传递到函数中的是指针,sizeof(dst)和sizeof(src)都是求指针的大小,为4
[解决办法]
数组名作为函数参数时要退化为其对应级别的指针,用strlen吧
- C/C++ code
#include <stdio.h>#include <stdlib.h>int main(){ char from[] = {'1','2','\0'}; //最好加上'\0' char to[] = {'1','2','\0'}; int fromLength = (int)strlen(from); int toLength = (int)strlen(to); printf("%d\n", fromLength); printf("%d\n", toLength); substrVersion1(from, to);}int substrVersion1(char dst[], char src[]){ int fromLength = (int)strlen(from); int toLength = (int)strlen(to); printf("%d\n", dstLength); printf("%d\n", srcLength);}