比较c中的2个char数组

时间:2015-07-16 16:14:54

标签: c filesystems fat

我有以下的char数组:

filename[256] = "one.txt"; 
shortname[11] = "ONE     TXT";

在c?

中比较这两个数组的最佳方法是什么?

short name的前8个字符必须适合.filename之前的字符。

我的情况是上述情况有效。

4 个答案:

答案 0 :(得分:0)

我不知道比较字符串的最佳方法,但直截了当的方法可以采用以下方式

#include <stdio.h>
#include <ctype.h>

int main( void )
{
    char filename[256] = "one.txt"; 
    char shortname[11] = "ONE     TXT"; 

    char *p = filename;
    char *q = shortname;
    size_t i = 0;
    while ( i < 8 && ( char )toupper( ( unsigned char )*p ) == *q ) ++i, ++p, ++q;

    if ( *q == ' ' || i == 8 ) puts( "They coincide" );
}

程序输出

They coincide

即程序检查文件名的初始字符是否与短名称一致。 filname中的点之前可以有多个字符,而不是shortname中的字符。 否则,您可以添加条件*p == '.'

答案 1 :(得分:0)

我不太确定你需要什么,所以我给你了解我的理解:

#include<stdio.h>
#include<string.h>

int main(void){
    char filename[256] = "one.txt";
    char shortname[11] = "ONE     TXT";
    size_t lenght = strlen(filename);
    unsigned int i;

    while(shortname[i]|=' ', shortname[++i]) {
    ;
    }

    for(i=0;i<lenght;i++){
        if(filename[i] == shortname[i]){
            printf("%c",filename[i]);
        }else{
            break;
        }
    }
    printf("\n");
    return 0;
}

输出:

  

一个

答案 2 :(得分:0)

感谢您的回答。我这样做了。此代码在循环中运行,该循环检查32个字节块形成FAT目录以查找匹配的目录条目:

   int extensionPos=0;
   int extensionCounter = 0; 
   int j;
   int fnf=0; //file not found marker
   int hasExtension=0; 

   //Check if filename has an extension and remember the position
   for (i=0;i<11;i++){
      if (filename[i] == '.'){
         break;
       }else{
         extensionPos++;
       }
   }

   //Is position < 11? filename has an extension
   if (extensionPos<11)
      hasExtension=1; 

   for (j=1;j<extensionCounter;j++){
       if (FAT_DirEntry->DIR_shortName[j] != filename[j]){
           fnf=1;     
           break;
       }
    }

    if (hasExtension == 1){//Do only check extension if filename has one
        extensionCounter +=1; // extensionCounter +1 because I don't want to work with the '.' 
        for (j=8;j<11;j++){ 
            if (FAT_DirEntry->DIR_shortName[j] != filename[extensionCounter]){
                    fnf=1; 
                    break;
             }
             extensionCounter++;
        }

    }   
    if (fnf == 0){
        ... 
    }

答案 3 :(得分:-1)

使用两个索引,每个字符串对应一个索引,并按char(忽略大小写)比较char并跳过空格和点。