C - 如何将扩展字符序列与函数 strcmp() 进行比较?



我需要比较字符串是否等于以下扩展字符序列:"———"(ALT + 0151代码重复三次(,这是在文本文件中。如何使用函数 strcmp(( 来做到这一点?

一段示例文本文件 (TSV(:

皮拉西卡巴大道阿曼多·萨勒·德·奥利维拉·拉多 par 13400-005 中心 皮拉西卡巴电视台 阿戈斯蒂尼奥·弗拉松 ——— 13400-008 中心 皮拉西卡巴大道阿曼多·萨勒斯·德·奥利维拉·拉多·伊姆帕尔 13400-010 中心

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

结构:

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

测试在"开关大小写"内,程序在此部分崩溃:

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

多谢。

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

case 3:
{
if(strcmp(token, "x97x97x97") == 0) 
strcpy(registro[i].trecho, NULL);
else
strcpy(registro[i].trecho, token);
break;
}

strcmp 仅在 null 上失败,您几乎可以这样做

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

如果你只是想看看字符串是否在较大的字符串中,strstr 是你要找的函数,而不是 strcmp。

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,则会出现未定义的行为。这种看似无害的代码有很多方式可以失控。

最新更新