panchaoxz 发表于 2014-4-29 11:07:20

求助一个简单的问题

#include <stdio.h>

void copyChar(){
        char *c1 = "I am a student";
        char c2[] = "I am a teacher!!!";

        printf("\nString c2 = %s\nString c1 = %s\nString",c2,c1);

        char *to = c2;
        char *from = c1;
        while(*from != '\0'){
                *to = *from;
                from++;
                to++;
        }

        printf("\nString c2 = %s\nString c1 = %s\nString",c2,c1);
}

就是我特别标注那一行,如果添加上可以运行是正确的,但是如果加上就编译不通过,这是为什么啊?

panchaoxz 发表于 2014-4-29 11:10:38

最后一句话打出病句了,是 不加那句printf就可以正确运行,加上就编译不通过

elvo 发表于 2014-4-29 11:18:52

你能给全代码么,我用c-free都是可以运行的啊

panchaoxz 发表于 2014-4-29 11:28:50

elvo 发表于 2014-4-29 11:18 static/image/common/back.gif
你能给全代码么,我用c-free都是可以运行的啊

我这就是全代码了,你可以把那函数名换成MAIN。
我用的是VS2008,我也不明白问题在哪儿。。。

panchaoxz 发表于 2014-4-29 11:29:35

panchaoxz 发表于 2014-4-29 11:10 static/image/common/back.gif
最后一句话打出病句了,是 不加那句printf就可以正确运行,加上就编译不通过

>e:\vcproject\testpointer\testpointer\copychar.c(9) : error C2143: syntax error : missing ';' before 'type'
1>e:\vcproject\testpointer\testpointer\copychar.c(10) : error C2143: syntax error : missing ';' before 'type'
1>e:\vcproject\testpointer\testpointer\copychar.c(11) : error C2065: 'from' : undeclared identifier
1>e:\vcproject\testpointer\testpointer\copychar.c(11) : error C2100: illegal indirection
1>e:\vcproject\testpointer\testpointer\copychar.c(12) : error C2065: 'to' : undeclared identifier
1>e:\vcproject\testpointer\testpointer\copychar.c(12) : error C2100: illegal indirection
1>e:\vcproject\testpointer\testpointer\copychar.c(12) : error C2065: 'from' : undeclared identifier
1>e:\vcproject\testpointer\testpointer\copychar.c(12) : error C2100: illegal indirection
1>e:\vcproject\testpointer\testpointer\copychar.c(13) : error C2065: 'from' : undeclared identifier
1>e:\vcproject\testpointer\testpointer\copychar.c(14) : error C2065: 'to' : undeclared identifier

这些是编译出错提示

elvo 发表于 2014-4-29 11:30:46

报的是什么错,能贴出来么

wjc2118 发表于 2014-4-29 11:47:23

把char *c1改成char c1[]就好了

elvo 发表于 2014-4-29 11:47:38

我没有vs2008,又用了vs2010,都是没有保错的,但就你给报错信息,应该是那句printf没有加;但是你给的又是有分号的。。
恩,爱莫能助了,只有围观大神解答了

panchaoxz 发表于 2014-4-29 15:18:55

wjc2118 发表于 2014-4-29 11:47 static/image/common/back.gif
把char *c1改成char c1[]就好了

同样报错,虽然不是报错有区别了。。。

问题是,我不加那printf就没问题啊,那个printf,到底影响了什么?

wjc2118 发表于 2014-4-29 15:35:15

panchaoxz 发表于 2014-4-29 15:18 static/image/common/back.gif
同样报错,虽然不是报错有区别了。。。

问题是,我不加那printf就没问题啊,那个printf,到底影响了什 ...

我复制到code blocks 上看的,没有报错,只是我说的那个地方有个警告

panchaoxz 发表于 2014-4-29 15:55:47

wjc2118 发表于 2014-4-29 15:35 static/image/common/back.gif
我复制到code blocks 上看的,没有报错,只是我说的那个地方有个警告

看两位仁兄的回复,我的程序应该是没有问题的。难道是我的VS2008的问题。。。

waphaoyun 发表于 2014-4-29 18:56:53

不会只能帮顶起            

pro-serv 发表于 2014-4-29 19:40:08

#include <stdio.h>

main()
{
      char *c1 = "I am a student";
      char c2[] = "I am a teacher!!!";
                char *to = c2;
      char *from = c1;

      printf("\nString c2 = %s\nString c1 = %s\nString",c2,c1);

      
      while(*from != '\0')
                {
                *to = *from;
                from++;
                to++;
      }

      printf("\nString c2 = %s\nString c1 = %s\nString",c2,c1);
}这样就没问题了,C语言中,类型声明必须放在开头的,你把声明放中间肯定报错

天使之约 发表于 2014-4-29 20:33:31

我直接运行了,能编译运行但是有警告,说是string类型转换成了char *类型,但是结果没有问题

panchaoxz 发表于 2014-4-30 10:32:59

pro-serv 发表于 2014-4-29 19:40 static/image/common/back.gif
这样就没问题了,C语言中,类型声明必须放在开头的,你把声明放中间肯定报错

恩,确实是这个问题,昨天晚上我自己也试了。
但是在我朋友那儿试,用相同的代码,用VS2008也能通过。。。不晓得为什么

panchaoxz 发表于 2014-4-30 10:36:20

天使之约 发表于 2014-4-29 20:33 static/image/common/back.gif
我直接运行了,能编译运行但是有警告,说是string类型转换成了char *类型,但是结果没有问题

14楼的解答是对的,貌似是通过C++编译是没问题的,但是用C编译就不可以

oggplay 发表于 2014-4-30 11:00:34

本帖最后由 oggplay 于 2014-4-30 20:31 编辑

一切正常,连警告都没有,检查你的编译环境



这个你真的感谢我了,我找到了资料了

这个是C99标准,说明你的编译器不支持C99标准

你的格式我的字 发表于 2014-4-30 11:23:29

14楼正解:lol:

枫界易城 发表于 2014-4-30 14:49:52

学习了,,,,,,,,,,,,

天使之约 发表于 2014-4-30 15:03:41

panchaoxz 发表于 2014-4-30 10:36 static/image/common/back.gif
14楼的解答是对的,貌似是通过C++编译是没问题的,但是用C编译就不可以

对于那个警告c编译器不允许
页: [1] 2
查看完整版本: 求助一个简单的问题