读书人

纠结的有关问题

发布时间: 2012-03-11 18:15:39 作者: rapoo

纠结的问题

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);} 

读书人网 >C语言

热点推荐