| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
- #include<stdio.h>
 
 - #include<string.h>
 
 - #define MAX 5
 
 - int main()
 
 - {
 
 -     int slogan[MAX][100];
 
 -     int i,j,text,min,max,temp;
 
 -     
 
 -     for(i=0;i<MAX;i++)
 
 -     {
 
 -         printf("输入第%d句话:",i+1);
 
 -         for(j=0;(text=getchar())!='\n';j++)
 
 -         {
 
 -             slogan[i][j]=text;
 
 -         }
 
 -         slogan[i][j]='\0';
 
 -     }
 
  
-     min=0;
 
 -     max=0;
 
 -     printf("你输入了下面%d句话:\n",MAX);
 
 -     for(i=0;i<MAX;i++)
 
 -     {
 
 -         printf("%s\n",slogan[i]);
 
 -         temp = strlen(slogan[i]);
 
 -         min=temp<strlen(slogan[min])?i:min;
 
 -         max=temp>strlen(slogan[max])?i:max;
 
 -     }
 
 -     printf("其中最长的是:%s\n",slogan[max]);
 
 -     printf("其中最短的是:%s\n",slogan[min]);
 
 - }
 
  复制代码 
我的编译器会报[Note] expected 'const char *' but argument is of type 'int *' 
为什么他输入得到字符串是只读的,为什么不能用int ,int 不是比char宽吗? 
我的所有代码char,我全用的int,也没问题啊! 
 本帖最后由 jackz007 于 2021-12-24 17:10 编辑  
 
         char 在有的时候确实可以被当作 int 用,但并不意味着 int 也可以被当作 char 来用。在这里可以下一个断言,int 在任何情况下都绝不可以被当作 char 来使用,尤其是字符串! 
         字符串 "ABC" 在内存中是 0x41,0x42,0x43,0x00 ,一共占用 4 个字节,如果是 int,那么,"ABC" 将是 0x41,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x00,0x00,0x00,x000,一共占用 16 个字节,这一切都是因为每个 int 占用的是 4 个字节,而 char 是 1 个。问题还不只是 int 占用内存多,操作系统在处理字符串时,是通过检测字符串末尾的 0x00 来判定字符串结束的,这个 int 型的字符串,在操作系统看来,就是一个单字符的字符串 "A",因为,0x41 的后面不止有 1 个,事实上是 3 个 0x00。如此看来,是不是就乱套了? 
 
 
 |   
 
 
 
 |