c语言strcmp函数
求助:
在windows平台下使用strcmp函数比较字符串可以,但是移植到linux下就不行了,两个字符串是一样的 但是比较返回值是不相等的,代码:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "ctype.h"
#define WW char
int strcmp_1(WW *u,WW *p);
int main(){
WW user[20]="huhuhu ";
WW pass[20]="huhuhu ";
int i;
i=strcmp_1(user,pass);
if (i>0)
{
printf("Yes\n");
}
else
printf("No\n");
}
int strcmp_1(WW *u,WW *p){
int i=0,j=0,l=0,m=0,k=0,n=0,b=0;
FILE *fp;
WW c[20][20];
WW mid;
fp=fopen("read.txt","r");
//»ñÈ¡ÎÄ?þµÄÐÐÊý
while(!feof(fp))
{
mid=fgetc(fp);
if(mid=='\n')
l++;
}
fseek(fp,0,SEEK_SET);//°ÑÎÄ?þÖ?ÕëÒÆµ?Ê×ÐÐ
for (i=0;i<l;i++)
{
fgets(c[i],20,fp);
printf("%s",c[i]);
fseek(fp,0,SEEK_CUR);//¶ÁȡһÐÐÖû»µ?ÏÂÒ»ÐÐ
}
for (k=0;k<l;k++)
{
for (n=0;n<20;n++)
{
//if (c[k][n]=="\r"||c[k][n]=="\n")
if (c[k][n]==10)
{
c[k][n]=0;
}
}
}
fclose(fp);
printf("1\n");
while (b<l)
{
printf("%s\n",c[b]);
printf("%s\n",u);
if (strcmp(u,c[b])==0)
{
printf("2\n");
if (strcmp(p,c[b+1])==0)
{
printf("3\n");
m++;
break;
}
else
break;
}
else
{
b=b+2;
}
//return m;
}
return m;
}
[解决办法]
#include "stdio.h"#include "stdlib.h"#include "string.h"#include "ctype.h"#define WW charint strcmp_1(WW *u,WW *p);int main(){ WW user[20]="huhuhu "; WW pass[20]="huhuhu "; int i; i=strcmp_1(user,pass); if (i>0) { printf("Yes\n"); } else printf("No\n");}int strcmp_1(WW *u,WW *p){ int i=0,j=0,l=0,m=0,k=0,n=0,b=0; FILE *fp; WW c[20][20]; WW mid; fp=fopen("read.txt","r"); while(!feof(fp)) { mid=fgetc(fp); if(mid=='\n') l++; } fseek(fp,0,SEEK_SET); for (i=0;i<l;i++) { fgets(c[i],20,fp); printf("%s",c[i]); fseek(fp,0,SEEK_CUR); } for (k=0;k<l;k++) { for (n=0;n<20;n++) { //if (c[k][n]=="\r"||c[k][n]=="\n") if (c[k][n]==10) { c[k][n]=0; } } } fclose(fp); printf("1\n"); while (b<l) { printf("%s\n",c[b]); printf("%s\n",u); if (strcmp(u,c[b])==0) { printf("2\n"); if (strcmp(p,c[b+1])==0) { printf("3\n"); m++; break; } else break; } else { b=b+2; } //return m; } return m;}
[解决办法]
对电脑而言只有二进制字节数组;对人脑才有字符串。
特供一段调试二进制字节数组用函数:
void HexDump(char *buf,int len) { int i,j,k; char binstr[80]; for (i=0;i<len;i++) { if (0==(i%16)) { sprintf(binstr,"%04x -",i); sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]); } else if (15==(i%16)) { sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]); sprintf(binstr,"%s ",binstr); for (j=i-15;j<=i;j++) { sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.'); } printf("%s\n",binstr); } else { sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]); } } if (0!=(i%16)) { k=16-(i%16); for (j=0;j<k;j++) { sprintf(binstr,"%s ",binstr); } sprintf(binstr,"%s ",binstr); k=16-k; for (j=i-k;j<i;j++) { sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.'); } printf("%s\n",binstr); }}
[解决办法]
LZ可否解释一下pass传进来做什么的?
另外。。。
如果楼主想最后输出YES,
read.txt里的内容必须至少3行,
前两行还必须为
huhuhu空格
huhuhu空格