鱼C论坛

 找回密码
 立即注册
查看: 1867|回复: 2

Linux下与windows下 数组定义的区别以及数组的长度求解

[复制链接]
发表于 2021-2-27 14:46:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
同样都是下面的代码,但是输出却不同,字符串的长度不一致;
#include "stdio.h"
#include "string.h"

void main(void){
        char str1[10] = "abc";
        char str2[3] = "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[i]);
        }

        printf("\r\n str1 size[");
        for(i=0; i<sizeof(str1); i++){
                printf("%d ", str1[i]);
        }


        printf("\r\n str2 len[");
        for(i=0; i<strlen(str2); i++){
                printf("%d ", str2[i]);
        }


        printf("\r\n str2 size[");
        for(i=0; i<sizeof(str2); i++){
               printf("%d ", str2[i]);
        }
}

在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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-27 19:51:38 | 显示全部楼层
1.虽然我没用过centons系统,但str2在执行完strcpy(str1,str2)后,str2后面却复制了str1,这是系统不一样导致的吗?
2.你可以把那句在Windows系统下输出,看看是不是一样,如果一样,那就是精度损失。如果不一样,就当我没说,我不了解centons
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-1 09:30:45 | 显示全部楼层
巴巴鲁 发表于 2021-2-27 19:51
1.虽然我没用过centons系统,但str2在执行完strcpy(str1,str2)后,str2后面却复制了str1,这是系统不一样导 ...

1.strcpy(str1,str2);这句已经注释掉了
2.在win下,改为%lld输出,与%d输出一致
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 13:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表