木子李工 发表于 2021-2-27 14:46:11

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

巴巴鲁 发表于 2021-2-27 19:51:38

1.虽然我没用过centons系统,但str2在执行完strcpy(str1,str2)后,str2后面却复制了str1,这是系统不一样导致的吗?
2.你可以把那句在Windows系统下输出,看看是不是一样,如果一样,那就是精度损失。如果不一样,就当我没说,我不了解centons

木子李工 发表于 2021-3-1 09:30:45

巴巴鲁 发表于 2021-2-27 19:51
1.虽然我没用过centons系统,但str2在执行完strcpy(str1,str2)后,str2后面却复制了str1,这是系统不一样导 ...

1.strcpy(str1,str2);这句已经注释掉了{:10_245:}
2.在win下,改为%lld输出,与%d输出一致
页: [1]
查看完整版本: Linux下与windows下 数组定义的区别以及数组的长度求解