【发布时间】:2021-01-08 02:23:08
【问题描述】:
我正在尝试反转从 strtok 返回的单词/标记,我正在以相反的顺序迭代每个标记并将每个第 i 个值分配给一个名为 new 的缓冲区。我可以打印令牌指针p 的每个第 i 个值/字符,但由于某种原因,我无法分配字符p 指向缓冲区new。我在这里遗漏了什么或做错了什么?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char str[] = "This is an example!";
char *new = malloc(strlen(str));
char *p = strtok(str, " ");
size_t j = 0;
while (1) {
for (size_t i=strlen(p)-1; i>-1; i--) {
new[j++] = p[i];
}
p = strtok(NULL, " ");
if (!p)
break;
new[j++] = ' ';
}
printf("%s\n", new);
return 0;
}
标准输出:
预期/预期输出:
sihT si na !elpmaxe
【问题讨论】:
-
试试:
i=strlen(p)->i=strlen(p)-1。因为p[strlen(p)]是NUL字符(由strtok放在那里)。一定要检查空字符串。 -
不幸的是它似乎没有修复。
-
但是你明白这是个问题吗?因此,即使它不能解决所有问题,您是否同意/理解它需要改变?
-
是的,非常感谢您指出!
标签: c parsing pointers c-strings strtok