Linux下与windows下 数组定义的区别以及数组的长度求解
同样都是下面的代码,但是输出却不同,字符串的长度不一致;#include "stdio.h"
#include "string.h"
void main(void){
char str1 = "abc";
char str2 = "gfh";
// strcpy(str1, str2);
printf("\r\n 1 len=%d, size=%d str=%s", strlen(str1), sizeof(str1), str1);
printf("\r\n 2 len=%d, size=%d str=%s", strlen(str2), sizeof(str2), str2);
printf("\r\n (1,%d,%d, \r\n (2,%d,%d", *str1, &str1, *str2, &str2);
int i;
printf("\r\n str1 len[");
for(i=0; i<strlen(str1); i++){
printf("%d ", str1);
}
printf("\r\n str1 size[");
for(i=0; i<sizeof(str1); i++){
printf("%d ", str1);
}
printf("\r\n str2 len[");
for(i=0; i<strlen(str2); i++){
printf("%d ", str2);
}
printf("\r\n str2 size[");
for(i=0; i<sizeof(str2); i++){
printf("%d ", str2);
}
}
在centos下的输出结果为:
1 len=3, size=10 str=abc
2 len=6, size=3 str=gfhabc
(1,97,-1080638702,
(2,103,-1080638705
str1 len[97 98 99
str1 size[97 98 99 0 0 0 0 0 0 0
str2 len[103 102 104 97 98 99
str2 size[103 102 104
在windows下 使用dev-c++编译输出结果为:
1 len=3, size=10 str=abc
2 len=3, size=3 str=gfh
(1,97,6487552,
(2,103,6487536
str1 len[97 98 99
str1 size[97 98 99 0 0 0 0 0 0 0
str2 len[103 102 104
str2 size[103 102 104
--------------------------------
现在有几点搞不明白
1.centos下,为什么定义的str2明明是3个字符,使用strlen返回的长度却是6
2.centos下,这里改为%llu输出时,printf("\r\n (1,%d,%llu, \r\n (2,%d,%llu", *str1, &str1, *str2, &str2);
改语句输出变为
(1,97,445595678258,
(2,-1080920529,13804225722149279924 1.虽然我没用过centons系统,但str2在执行完strcpy(str1,str2)后,str2后面却复制了str1,这是系统不一样导致的吗?
2.你可以把那句在Windows系统下输出,看看是不是一样,如果一样,那就是精度损失。如果不一样,就当我没说,我不了解centons 巴巴鲁 发表于 2021-2-27 19:51
1.虽然我没用过centons系统,但str2在执行完strcpy(str1,str2)后,str2后面却复制了str1,这是系统不一样导 ...
1.strcpy(str1,str2);这句已经注释掉了{:10_245:}
2.在win下,改为%lld输出,与%d输出一致
页:
[1]