读书人

c语言strcmp函数解决思路

发布时间: 2012-03-18 13:55:39 作者: rapoo

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;

}









































[解决办法]

C/C++ code
#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;} 


[解决办法]
对电脑而言只有二进制字节数组;对人脑才有字符串。
特供一段调试二进制字节数组用函数:

C/C++ code
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空格

读书人网 >C语言

热点推荐