【发布时间】:2024-01-09 17:22:01
【问题描述】:
对于一个项目,我试图从字符串中读取一个 int 和一个字符串。这里唯一的问题是 sscanf 在看到空格和一些特殊字符时似乎无法读取%s。我只想打印特殊字符中存在的字符串。有没有办法绕过这个限制?这是我正在尝试做的一个示例:
类似于this link,变化不大
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char** argv) {
int age;
char* buffer;
buffer = malloc(200 * sizeof(char));
sscanf("19 cool kid >>> ram <<<", "%d %[^\t\n] >>> %*s <<<", &age, buffer);
printf("%s is %d years old\n", buffer, age);
return 0;
}
它打印的是:“cool child >>> ram 我需要 “ram 是 19 岁”。有什么解决办法吗?
注意:有时“coolkid”字符串也会变成“coolkid”。
【问题讨论】:
-
好吧,您可以尝试从您传递给
sscanf的引用字符串中取出“19”以及>>>和<<<的两个实例来开始。如果你把它们放到字符串中,当你把它打印出来时它们就会在那里。 -
你有使用
sscanf()吗?strtok()的一些额外努力会给你更多的灵活性,恕我直言。 -
当调用 malloc() 1) 表达式:'sizeof(char)' 被定义为 1 并且对传递给 malloc 的值没有影响.. 整理代码删除无用的表达式。 2) 始终检查 (!=NULL) malloc() 的返回值以确保操作成功
-
this: '%[^\t\n]' 不正确,因为源字符串中没有制表符和换行符。