user-0 提问: 语法错误

回复:
user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉  这个对我来说水平太高端大气上档次了。。

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。恩恩，是个不错的方法，以前有过这种记忆，不过印象不深，今后一定谨记此方法。

user: user-0
content: 引用 2 楼 truelance 的回复:char *s2 = ""; //没有为s2分配空间, s2指向一个空字串, 可能在常量区.  s2 += "0000"; 字符串不支持加法, 字符串拼接要使用strcat. 而且因为s2没有分配空间, 这里会导致内存异常  其他的语法错误, 你要拿编译器检查. 靠人眼代替已有的工具, 只有书呆子才会干.这个错误我知道，可是我就是一时不知道如何改正这个问题。

user: user-0
content: 引用 楼主 u012523688 的回复:#include<stdio.h> #include<string.h> //十六进制转为八进制  int main() { 	int n,i; 	int flag = 0; 	char s1[16]; 	scanf("%d",&n); 	for( i = 0; i <= n; i++ ) 	{ 		gets(s1); 		char *s2 = ""; 		for( i = 0; i < strlen(s1); i++ )//十六进制转为二进制  		{ 			switch(s1[i]) 				{ 					case '0':s2 += "0000";break; 					case '1':s2 += "0001";break; 					case '2':s2 += "0010";break; 					case '3':s2 += "0011";break; 					case '4':s2 += "0100";break; 					case '5':s2 += "0101";break; 					case '6':s2 += "0110";break; 					case '7':s2 += "0111";break; 					case '8':s2 += "1000";break; 					case '9':s2 += "1001";break; 					case 'A':s2 += "1010";break; 					case 'B':s2 += "1011";break; 					case 'C':s2 += "1100";break; 					case 'D':s2 += "1101";break; 					case 'E':s2 += "1110";break; 					case 'F':s2 += "1111";break; 					default : break;  				} 		} 	} 	len = strlen(s2)%3; 	if( len == 1 ) 	{ 		s2 += "00"; 	}     if( len == 2) 	{ 		s2 += "0";	 	} 	for( i = 0; i <= strlen(s2) - 3; i += 3 )//二进制转为八进制  	{ 		sum = 4 * ( s[i] - '0' ) + 2 * ( s[i+1] - '0' ) + 1 * ( s[i+2] - '0' ); 		if( sum ) 		{ 			flag = 1;	 		}  		if( flag ) 		{ 			printf("%o",sum);	 		} 	}     return 0;  }不知道语法上哪里错了，求指教一下！

user: user-1
content: 1、s2=s2+"0000"; 这种肯定是不行的； 2、发现你里面好多变量都没定义就直接用了，如 len 3、还有s2是你放在了for里面成了局部变量，外面是不能用的。  建议找一本语法书好好先看看

user: user-2
content: s2 += "0000";break;  s2=s2+"0000"; 能把一个指针和一个字符串相加，肯定编译不过的～

user: user-3
content: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉

user: user-3
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。

user: user-4
content: char *s2 = ""; //没有为s2分配空间, s2指向一个空字串, 可能在常量区.  s2 += "0000"; 字符串不支持加法, 字符串拼接要使用strcat. 而且因为s2没有分配空间, 这里会导致内存异常  其他的语法错误, 你要拿编译器检查. 靠人眼代替已有的工具, 只有书呆子才会干.