我需要比较字符串是否等于以下扩展字符序列:文本文件中的“---”(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;
}
非常感谢。
答案 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,则会得到未定义的行为。这种看似无害的代码可以通过很多方式解决问题。