strlen 函数

char xx[20][80];

void jsSort()
{int i,j,k,str;
char a;
for(i=0;i<20;i++)

{for(j=1;j<(strlen(xx[i])-2);j=j+2)
for(k=j+2;k<strlen(xx[i]);k=k+2)
if(xx[i][j]>xx[i][k])
{a=xx[i][j];xx[i][j]=xx[i][k];xx[i][k]=a;}}
}
这样算不出任何结果.
但如果我定义一个STRL 把STRL=strlen(xx[i]) 用STRL替换程序中的strlen(xx[i])就能正确得出结果;为什么一定要替换呢??
#include <stdio.h>
#include <string.h>
#include <conio.h>

char xx[20][80];

void jsSort()
{ int i,j,k,strl,half;
char temp;
for(i=0;i<20;i++)
{
for(j=0;j<strlen(xx[i])/2-1;j++)
for(k=j+1;k<strlen(xx[i])/2;k++)
if(xx[i][j]<xx[i][k])
{ temp=xx[i][j]; xx[i][j]=xx[i][k]; xx[i][k]=temp;}
for(j=half-1,k=strl-1;j>=0;j--,k--)
{ temp=xx[i][j]; xx[i][j]=xx[i][k]; xx[i][k]=temp;}
}
}

void main()
{
readDat();
jsSort();
writeDat();
}

readDat()
{
FILE *in;
int i=0;
char *p;

in=fopen("in.dat","r");
while(i<20&&fgets(xx[i],80,in)!=NULL){
p=strchr(xx[i],'\n');
if(p)*p=0;
i++;
}
fclose(in);
}

writeDat()
{
FILE *out;
int i;

system("cls");
out=fopen("out.dat","w");
for(i=0;i<20;i++){
printf("%s\n",xx[i]);
fprintf(out,"%s\n",xx[i]);
}
fclose(out);
}
这是整段程序XX中存有in.dat的的数据;并非没有初值;必须使用strl=strlen(xx);half=strl/2;替换才行.?

首先要声明,strlen(xx[i])反回的值是0,因为你的xx还没有初值。你应该在readDat()的while循环中测试一下,是否读入了数据到xx数组中,在while中使用printf输出xx数组就知道了。应该是strlen反回0导至的错误。因为不了解你的那个dat文件中9近是什么内容,因此不好判断

程序主要错在第一个for语句for(j=1;j<(strlen(xx[i])-2);j=j+2)中的(strlen(xx[i])-2)这一句。

因为strlen()函数的反回类型为unsigned int(无符号整型),因此再进行strlen(xx[i]-2的时候得到的是一个负数-2,而unsigned int是无法表示负数的,因此就被计算机转换为补码的形式来表示-2了,,也就是十进制数的4294967292,二进制形式是11111111110(具体多少个1自已算,反正前面全是1)

你可以把strlen(xx[i])强制转换为int型来测试,比如(int)strlen(xx[i]-2这样的话就能得到正确结果了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-03-16
能不能把源程序发给我啊,你发的程序不完整,这样不容易解释。
第2个回答  2015-10-05

    strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含“\0”)。

    头文件:string.h

    格式:strlen (字符数组名)。

    功能:计算给定字符串的(unsigned int型)长度,不包括'\0'在内。

    说明:返回s的长度,不包括结束符NULL。

    相关函数:

    TCHAR.H routine _UNICODE & _MBCS not defined_MBCS defined_UNICODE defined_tcslen

    应用:        

    #include<string.h>

    #include<stdio.h>

    int main(void)

    {

        char*s="GoldenGlobalView";

        printf("%s has %d chars",s,strlen(s));

        getchar();

        return 0;

    }


相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网