gpt4 book ai didi

使用 strcasecmp 比较 C 中的 char*

转载 作者:行者123 更新时间:2023-11-30 15:16:14 25 4
gpt4 key购买 nike

我正在从套接字读取字节并将其复制到字符数组中。

char usrInputStr[256];
if ((rbytes = read(STDIN_FILENO, usrInputStr, 256)) < 0) {
perror("Read error: ");
exit(-1);
}
char finalStr[rbytes + 1];
memcpy(finalStr, usrInputStr, rbytes);

现在,我在堆上分配一个数组,并将字符串拆分为单词,并将每个单词放入一个 char 数组数组中。这是执行此操作的代码。

char** currentTokens = (char**)malloc(sizeof(char*) * 256);
for(int i = 0; i < 256; i++) {
currentTokens[i] = (char*)malloc(sizeof(char) * 256);
}

int sz = splitStrToArray(finalStr, currentTokens);

splitStrToArray函数的定义在这里,效果很好。

int splitStrToArray(char* str, char** arr) {
int count = 0;
char* buffer;
int len = strlen(str);

for (int i = 0; i < len ; ++i) {
if(isspace(str[i])) {
count++;
}
}

int index = 0;
buffer = strtok(str, " ");
while(buffer != NULL) {
memcpy(arr[index], buffer, strlen(buffer));
index++;
buffer = strtok(NULL, " ");
}
return count;
}

但是,当我将其与用户输入进行比较时,它不会返回零,因此两个字符串不匹配。

if(strncasecmp(currentTokens[0], "quit") == 0) {
printf("quit" );
breakTrigger = 1;
} else if(strcasecmp(currentTokens[0], "q") == 0) {
printf("q");
breakTrigger = 1;
} else {
callback(currentTokens, sz, port);
}

我检查了 currentTokens[0] 并且该词是正确的。当我尝试以 int 形式获取 strcasecmp 的返回值并打印它时,出现段错误。我是 C 新手,感谢任何帮助。

最佳答案

您的字符串都不是以 null 结尾的,因此您始终有未定义的行为。使用 memcpy 复制字符串几乎不是您想要的。

您应该考虑使用 strdup(如果可用)。否则先malloc,然后strcpy。

在 FinalStr 的特殊情况下,我认为根本没有充分的理由执行复制。只需直接读入其中(并且不要忘记空终止。)或者,使用标准 C 库而不是底层 posix 层。

关于使用 strcasecmp 比较 C 中的 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33181476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com