A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程序猿-2014 中级黑马   /  2014-4-11 20:19  /  1363 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 程序猿-2014 于 2014-4-15 11:15 编辑

#define String char *

int main()
{
    String s1, s2;
   
    s1 = "jack";
    s2 = "rose";
    return 0;
}
求教    这道题为什么是错的呢      有点不太明白

评分

参与人数 1黑马币 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

倒序浏览
这是错误提示:
incompatible pointer to integer conversion assigning to
      'char' from 'char [5]' [-Wint-conversion]  大概就是给字符赋值字符串
你的#define String char *在 String s1, s2相当于下面
char *s1;   char s2;

你可以将#define String char * 换成typedef char * String
  1. typedef char * String;
  2. int main()
  3. {
  4.     String s1, s2;
  5.    
  6.     s1 = "jack";
  7.     s2 = "rose";
  8.     return 0;
  9. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
#deinfe String char * 定义了宏String
String s1,s2;展开后为char * s1,s2。
而你需要的是两个指针类型的变量,应该写成char *s1,*s2;
*只修饰s1,s2就是char类型。s2="rose"是把"rose"数组赋值给s2,也就是把char[5]类型赋值给char,所以报错。
定义char* 为string,typedef 比define 做得更好,不会出这种问题。
当然你的这个程序在定义s2时前加个*号,也不会报错额。
  1. #define String char *

  2. int main()
  3. {
  4.     String s1, *s2;
  5.    
  6.     s1 = "jack";
  7.     s2 = "rose";
  8.     return 0;
  9. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
肯定会出错咯!
程序开始执行,代码就会变成这个样子:
  1. int main()
  2. {
  3.     char *s1, s2;
  4.    
  5.     s1 = "jack";
  6.     s2 = "rose";
  7.     return 0;
  8. }
复制代码

定义的 s2其实是字符类型变量
改为:
  1. #define String char *

  2. int main()
  3. {
  4.     String s1;
  5.     String s2;
  6.    
  7.     s1 = "jack";
  8.     s2 = "rose";
  9.     return 0;
  10. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马