c++ - strcmp 为相等的字符序列返回 false
问题描述
我有一个strcmp
用来做决定的函数,见下文:
void get_data(file_observational_area * _file_observational_area, int dimensions, int * start_indices, int * end_indices) {
char buffer[1024];
FILE *file;
size_t nread;
if (NULL != _file_observational_area) {
cout << "***_file_observational_area \n";
if (NULL != _file_observational_area->_file) {
//if the data is in a file
cout << "****_file_observational_area->_file \n";
cout << "***_file_observational_area->_file->local_identifier:" << _file_observational_area->_file->local_identifier << "\n";
cout << "***_file_observational_area->_file->file_name:" << _file_observational_area->_file->file_name << "\n";
cout << "***data_file_local_identifier:" << data_file_local_identifier << "\n";
if (strcmp(_file_observational_area->_file->local_identifier, data_file_local_identifier) == 1) {
if (NULL != _file_observational_area->_file->file_name) {
//open the file
file = fopen(_file_observational_area->_file->file_name, "r");
if (file) {
while ((nread = fread(buffer, 1, sizeof (buffer), file)) > 0)
cout << buffer << "\n";
if (ferror(file)) {
/* deal with error */
}
}
}
} else {
cout << "***_file_observational_area NOT A file \n";
}
if (NULL != file) {
fclose(file);
file = NULL;
}
}
}
}
用于比较的 data_file_local_identifier 在 struct 中定义:
#ifndef DATA_FILE__H
#define DATA_FILE__H
#define data_file_local_identifier "file"
struct data_file
{
char * file_name;
char * local_identifier;
};
typedef struct data_file data_file;
#endif /* DATA_FILE__H */
程序输出片段:
****_file_observational_area->_file
***_file_observational_area->_file->local_identifier:file
***_file_observational_area->_file->file_name:A0087_0008_597249118_597252671_181130002623_eu.csv
***data_file_local_identifier:file
***_file_observational_area NOT A file
在这行代码上面的 get_data 函数中:
if (strcmp(_file_observational_area->_file->local_identifier, data_file_local_identifier) == 1)
返回 false 而不是 true,尽管如果您查看输出,两个字符串都是“文件”。那么为什么会失败呢?
解决方案
您似乎假设strcmp
如果字符串相等则返回 1。
但如果字符串相等则strcmp
返回0,或者返回符号代表“较小”的数字:
返回一个整数值,表示字符串之间的关系:
<0 不匹配的第一个字符在 ptr1 中的值低于在 ptr2 中的值
0 两个字符串的内容相等
>0 第一个不匹配的字符在 ptr1 中的值大于在 ptr2 中的值
推荐阅读
- f# - 在 F# 中,我应该何时使用 List.choose 以及何时使用 List.filter
- vba - Word 用户表单 - 只允许将数据添加到书签一次
- websocket - 丢包套接字io
- tensorflow - 通过 Tensorboard 可视化结果
- mysql - 两个单独的表和一个带列的表之间的区别
- c# - 我正在尝试使用 C#.NET 控制台应用程序在 SQL-Server 中的现有数据库中创建动态表。但我得到了例外
- jenkins - jenkinsfile 中的 SonarQube - 如果质量检查失败则停止
- javascript - 我不能再连接到mongodb了?
- javascript - Enmap (better-sqlite map) 在应用程序重新启动之前不会更新
- xml - 我的 XXE 有效负载没有得到关于我要利用的文件的响应