user-0 提问: C语言extern字符数组，无法在循环中输出？？

回复:
user: user-0
content: 引用 13 楼 lm_whales 的回复:[quote=引用 12 楼 qldsrx 的回复:] [quote=引用 11 楼 lm_whales 的回复:] 其实你不需要回答那么多，看他二楼的错误信息就知道，肯定是那个变量的定义位置错了，实际我们自己故意将其位置换到函数下面试下，就可以重新那样的错误信息了。[/quote] 我只是示范一下， 回答少了，他不看 [/quote] 不管回答的少不少我都会看的，在这个问题上回复一句我散分 http://bbs.csdn.net/topics/391844721

user: user-0
content: 引用 9 楼 qldsrx 的回复:[quote=引用 7 楼 GZQ0821 的回复:] [quote=引用 3 楼 qldsrx 的回复:] 你这个变量的定义写在了函数定义的后面了  #include<stdio.h> #include<stdlib.h> #include<string.h>  extern char rxtBuf[256];  int mian(void) {   int i=0;   //.......   printf("=======%s\n",rxtBuf);     //可以正常输出   while(i<5)   {     printf("=====%c\n",rxtBuf[i]);    //编译出错     i++;   }   return 0; }  顺序应该没有错吧？？[/quote] 这个int mian(void)不是主函数吧。我刚用主函数测试了下，没任何问题，不然你自己用一个简单的测试程序试试，肯定是你复杂项目里有啥顺序问题错了。[/quote]  非常感谢，是我的疏忽  声明没错是我把变量名字写错了

user: user-0
content: 引用 13 楼 lm_whales 的回复:[quote=引用 12 楼 qldsrx 的回复:] [quote=引用 11 楼 lm_whales 的回复:] 其实你不需要回答那么多，看他二楼的错误信息就知道，肯定是那个变量的定义位置错了，实际我们自己故意将其位置换到函数下面试下，就可以重新那样的错误信息了。[/quote] 我只是示范一下， 回答少了，他不看 [/quote] 多谢多谢  引用 11 楼 lm_whales 的回复:修改一下： [quote=引用 10 楼 lm_whales 的回复:] #include <stdlib.h> #include <string.h> extern char txtBuf[256];  int main(){     strcpy(txtBuf,"Hello Worlds!\n");     printf("%s\n",txtBuf);     int i=0;     while(txtBuf[i]){           printf("%c",txtBuf[i++]);     }     printf("\n");      return 0; }  //注释掉这一行，则编译通不过,其实是链接有问题，，， txtBuf 没定义，所以链接时，找不到这个符号 //char txtBuf[256];  ||=== Build: Debug in extern_dcl (compiler: GNU GCC Compiler) ===| obj\Debug\main.o||In function `main':| E:\Devlops\CB\extern_dcl\main.c|7|undefined reference to `txtBuf'| E:\Devlops\CB\extern_dcl\main.c|7|undefined reference to `txtBuf'| E:\Devlops\CB\extern_dcl\main.c|7|undefined reference to `txtBuf'| E:\Devlops\CB\extern_dcl\main.c|7|undefined reference to `txtBuf'| E:\Devlops\CB\extern_dcl\main.c|7|undefined reference to `txtBuf'| obj\Debug\main.o:E:\Devlops\CB\extern_dcl\main.c|8|more undefined references to `txtBuf' follow| ||=== Build failed: 6 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|  注: extern  char txtBuf[256];///仅仅是外部引用声明，只是多了一个数组大小信息。 ///这种形式，可以提供数组大小信息 ///所有写在这句之后的代码，都能通过 sizeof( txtBuf) 得到数组大小， ///但是有可能造成 数组定义不一致， ///如果只在定义处修改数组大小的话。  ///通常写作 extern char txtBuf[];  ///这种写法，数组定义处，可以随便修改数组大小，二者互不妨碍。[/quote]  非常感谢！！问题找出来了，是我的疏忽  声明没错是我把变量名字写错了

user: user-1
content: 引用 12 楼 qldsrx 的回复:[quote=引用 11 楼 lm_whales 的回复:] 其实你不需要回答那么多，看他二楼的错误信息就知道，肯定是那个变量的定义位置错了，实际我们自己故意将其位置换到函数下面试下，就可以重新那样的错误信息了。[/quote] 我只是示范一下， 回答少了，他不看

user: user-2
content: 引用 11 楼 lm_whales 的回复: 其实你不需要回答那么多，看他二楼的错误信息就知道，肯定是那个变量的定义位置错了，实际我们自己故意将其位置换到函数下面试下，就可以重新那样的错误信息了。

user: user-1
content: 修改一下： 引用 10 楼 lm_whales 的回复:#include <stdlib.h> #include <string.h> extern char txtBuf[256];  int main(){     strcpy(txtBuf,"Hello Worlds!\n");     printf("%s\n",txtBuf);     int i=0;     while(txtBuf[i]){           printf("%c",txtBuf[i++]);     }     printf("\n");      return 0; }  //注释掉这一行，则编译通不过,其实是链接有问题，，， txtBuf 没定义，所以链接时，找不到这个符号 //char txtBuf[256];  ||=== Build: Debug in extern_dcl (compiler: GNU GCC Compiler) ===| obj\Debug\main.o||In function `main':| E:\Devlops\CB\extern_dcl\main.c|7|undefined reference to `txtBuf'| E:\Devlops\CB\extern_dcl\main.c|7|undefined reference to `txtBuf'| E:\Devlops\CB\extern_dcl\main.c|7|undefined reference to `txtBuf'| E:\Devlops\CB\extern_dcl\main.c|7|undefined reference to `txtBuf'| E:\Devlops\CB\extern_dcl\main.c|7|undefined reference to `txtBuf'| obj\Debug\main.o:E:\Devlops\CB\extern_dcl\main.c|8|more undefined references to `txtBuf' follow| ||=== Build failed: 6 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|  注: extern  char txtBuf[256];///仅仅是外部引用声明，只是多了一个数组大小信息。 ///这种形式，可以提供数组大小信息 ///所有写在这句之后的代码，都能通过 sizeof( txtBuf) 得到数组大小， ///但是有可能造成 数组定义不一致， ///如果只在定义处修改数组大小的话。  ///通常写作 extern char txtBuf[];  ///这种写法，数组定义处，可以随便修改数组大小，二者互不妨碍。

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h> extern char txtBuf[256];  int main(){     strcpy(txtBuf,"Hello Worlds!\n");     printf("%s\n",txtBuf);     int i=0;     while(txtBuf[i]){           printf("%c",txtBuf[i++]);     }     printf("\n");      return 0; } char txtBuf[256]; 输出 Hello Worlds!  Hello Worlds!  #include <stdlib.h> #include <string.h> extern char txtBuf[256];  int main(){     strcpy(txtBuf,"Hello Worlds!\n");     printf("%s\n",txtBuf);     int i=0;     while(txtBuf[i]){           printf("%c",txtBuf[i++]);     }     printf("\n");      return 0; }  //注释掉这一行，则编译通不过 //char txtBuf[256];  ||=== Build: Debug in extern_dcl (compiler: GNU GCC Compiler) ===| obj\Debug\main.o||In function `main':| E:\Devlops\CB\extern_dcl\main.c|7|undefined reference to `txtBuf'| E:\Devlops\CB\extern_dcl\main.c|7|undefined reference to `txtBuf'| E:\Devlops\CB\extern_dcl\main.c|7|undefined reference to `txtBuf'| E:\Devlops\CB\extern_dcl\main.c|7|undefined reference to `txtBuf'| E:\Devlops\CB\extern_dcl\main.c|7|undefined reference to `txtBuf'| obj\Debug\main.o:E:\Devlops\CB\extern_dcl\main.c|8|more undefined references to `txtBuf' follow| ||=== Build failed: 6 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|  extern  char txtBuf[256];///仅仅是外部引用声明，只是多了一个数组大小信息。 通常写作 extern char txtBuf[];

user: user-2
content: 引用 7 楼 GZQ0821 的回复:[quote=引用 3 楼 qldsrx 的回复:] 你这个变量的定义写在了函数定义的后面了  #include<stdio.h> #include<stdlib.h> #include<string.h>  extern char rxtBuf[256];  int mian(void) {   int i=0;   //.......   printf("=======%s\n",rxtBuf);     //可以正常输出   while(i<5)   {     printf("=====%c\n",rxtBuf[i]);    //编译出错     i++;   }   return 0; }  顺序应该没有错吧？？[/quote] 这个int mian(void)不是主函数吧。我刚用主函数测试了下，没任何问题，不然你自己用一个简单的测试程序试试，肯定是你复杂项目里有啥顺序问题错了。

user: user-0
content: 引用 5 楼 lm_whales 的回复:extern char txtBuf[256];     。。。。。。。 char txtBuf[256]; 。。。。。 或者  extern char txtBuf[]; 。。。。   char txtBuf[256];;    。。。。。  不行还是会出错，直接printf输出或者rxtBuf[0]字节输出都行 为什么偏偏不能循环呢？？？ 下面是输出的错误： error:'txtBuf' undeclared (first use in this function) error:(Each undeclared identifier is reported only once for each function it appears in)

user: user-0
content: 引用 3 楼 qldsrx 的回复:你这个变量的定义写在了函数定义的后面了  #include<stdio.h> #include<stdlib.h> #include<string.h>  extern char rxtBuf[256];  int mian(void) {   int i=0;   //.......   printf("=======%s\n",rxtBuf);     //可以正常输出   while(i<5)   {     printf("=====%c\n",rxtBuf[i]);    //编译出错     i++;   }   return 0; }  顺序应该没有错吧？？

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:头文件重复包含了。 那为什么直接用printf输出就可以？

user: user-1
content: extern char txtBuf[256];     。。。。。。。 char txtBuf[256]; 。。。。。 或者  extern char txtBuf[]; 。。。。   char txtBuf[256];;    。。。。。

user: user-3
content: 头文件重复包含了。

user: user-2
content: 你这个变量的定义写在了函数定义的后面了

user: user-0
content: 引用 1 楼 qldsrx 的回复:把错误信息贴出来看呢  error:'txtBuf' undeclared (first use in this function) error:(Each undeclared identifier is reported only once for each function it appears in)

user: user-2
content: 把错误信息贴出来看呢