首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

纠结的有关问题

2012-03-11 
纠结的问题C/C++ code#include stdio.h#include stdlib.hint main(){char from[] {1,2}char to

纠结的问题

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

热点排行