C - 如何比较扩展char序列和函数strcmp()?

时间:2018-06-13 18:36:15

标签: c char strcmp

我需要比较字符串是否等于以下扩展字符序列:文本文件中的“---”(ALT + 0151代码重复三次)。如何使用strcmp()函数?

示例文本文件(TSV)的一部分:

Piracicaba Av。 Armando Salles de Oliveira Lado par 13400-005 Centro 皮拉西卡巴电视Agostinho Frasson --- 13400-008 Centro 皮拉西卡巴大道Armando Salles de OliveiraLadoímpar13400-010Centro

当我读取文件并打印时,该字段在监视器上显示“ùùù”。

结构:

typedef struct {
    char cidade[50];
    char tipoLogradouro[20];
    char logradouro[50];
    char trecho[30];
    char cep[10];
    char bairro[50];
} Endereco;

测试在'switch case'内,程序在这部分崩溃:

case 3:
      {
          if(strcmp(token, "———") == 0) // Change to "ùùù" and fails too. 
              strcpy(registro[i].trecho, NULL);
          else
              strcpy(registro[i].trecho, token);
          break;
      }

非常感谢。

3 个答案:

答案 0 :(得分:1)

通常在C中,您只能在带引号的字符串中使用7位ASCII,因此对于高位ASCII,您需要将\ x转义序列与字符的十六进制代码一起使用。因此,在您的情况下,您可以键入:" \ x97 \ x97 \ x97",因为97是十六进制为151的十六进制。

public function run()
{
    // instead of using new Faker\Generator()
    $faker = Faker\Factory::create();

    //create a user
    $adminuser = App\User::create(
        [
            'name'        => 'admin',
            'first_name'  => 'firstuser',
            'profile_pic' => $faker->image('storage/app/public/users',400,300, 'people', false),
        ]
    );
}

答案 1 :(得分:0)

strcmp只在null上失败,你几乎可以做到

if (strcmp(inputString,"———")==0){
   printf("Strings Equal\n")
} else{
   printf("Strings unequal")
}

如果您正试图查看字符串是否在较大的字符串中,那么strstr是您寻找的不是strcmp的函数。

答案 2 :(得分:0)

strcpy只有一件事,只有,这就是将一个字符串复制到另一个字符串。如果你给它NULL,那不是一个字符串,并且取消引用一个NULL指针会导致崩溃。

你想要的是这个:

 if (strcmp(token, "———") == 0)
    // Assign NULL pointer
    registro[i].trecho = NULL;
 else
    // Copy string to buffer
    strcpy(registro[i].trecho, token);

记住strcpy是一个非常危险的函数,因为它假定了很多关于目标缓冲区的事情。如果trecho不足以容纳token字符串,包含NULL终结符,则会出现未定义的行为。如果token没有正确地终止NULL,则会得到未定义的行为。这种看似无害的代码可以通过很多方式解决问题。