- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从套接字读取字节并将其复制到字符数组中。
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/
我在strcasecmp上做了一个sigsegved的小程序,直到我做了这个测试用例才知道为什么: strcasecmp(NULL, "TEST"); 编译时,它给了我以下警告: test.c:9:4
我正在尝试计算动态结构数组中单词出现的次数。但输出与所需的答案不匹配。对代码的任何指导或修改将不胜感激。 void COUNT(struct wordsStruct *allWords, int s
看起来 g_strncasecmp 已被弃用,所以我正在寻找另一个函数来做同样的事情。 最佳答案 来自文档 http://library.gnome.org/devel/glib/stable/gli
我正在尝试构建一个名为 lipiTk 的源代码 我有很多这样的错误: Documents/lipi/lipi/src/reco/shaperec/activedtw/ActiveDTWShapeRec
我想知道为什么 strcasecmp() 在我第一次使用它时返回 0 而不是第二次。 在这个例子中,我专门将“hello world”输入到标准输入中。不是打印 0 0,而是打印 0 10。我有以下代
本文实例分析了php字符串比较函数用法。分享给大家供大家参考,具体如下: 直接比较字符串是否完全一致,可以使用"=="来进行,但是有时候可能需要进行更加复杂的字符串比较,如部分
基本上我有代码: echo strcasecmp('hello', ' ') ? 'true' : 'false'; 我不太明白,我希望这里的结果是假的而不是真的,因为字符串不相等...... 是否有
所以我对 C 和整个字符串操作很陌生,但我似乎无法让 strtok() 工作。似乎每个人都有相同的 strtok 模板: char* tok = strtok(source,delim); do {
我尝试在 Code::Blocks 中使用 MinGW 编译 Assimp,但出现以下错误。 \assimp-3.3.1\assimp-3.3.1\code\StringComparison.h||I
前几天我在 CodeReview 上发了一篇文章。一位回答我问题的人建议我不要使用 strcasecmp(),因为“函数是非标准的 [并且] 这使得 [我的] 代码不可移植。”我是这样使用它的: in
我正在从套接字读取字节并将其复制到字符数组中。 char usrInputStr[256]; if ((rbytes = read(STDIN_FILENO, usrInputStr, 256)) <
我有一些代码在一个函数中大量使用 strcasecmp(参见版本 1)。所以我想知道我是否应该将它更改为大写或小写和 strcmp(如版本 2)以兼容 c 并具有更好的性能,因为我只需要将其转换为大写
我正在尝试将应用程序从cygwin移植到Visual Studio 2008 Express 但我收到此错误: error C3861: 'strcasecmp': identifier not fo
我有以下代码: printf("num: %d\n", strcasecmp(buf, "h\n")); 当我尝试插入不同的字母时,我得到以下结果: a: -7 g: -1 i: 1 j: 2 h:
我是一名优秀的程序员,十分优秀!