- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 insertItem()
列表 api 成功插入所有类型的项目,例如字符串(如下),
static void copyData(List *records, char *delim, char *argv[]){
char *item = malloc(5);
strcpy(item, "abcd");
int count = 0;
while(count++ < 10){
insertItem(records, item);
item = malloc(5);
strcpy(item, "efgh");
}
}
<小时/>
输出:
$ ./frequencyCounter.exe ARRAY
Key is:abcd
Key is:efgh
Key is:efgh
Key is:efgh
Key is:efgh
Key is:efgh
Key is:efgh
Key is:efgh
Key is:efgh
Key is:efgh
Size of list: 10
Before freeList()After freeList()
<小时/>
但是strtok()
tokens显示有问题的代码,如下所示,上面不需要buf[]
参数,
static void copyData(List *records, char buf[], char *delim, char *argv[]){
char *token = strtok(buf, delim);
void *item = malloc(strlen(token) + 1);
item = memcpy(item, token, strlen(token)+1);
printf("token-%s\n", token);
while(token != NULL){
insertItem(records, item);
token = strtok(NULL, delim);
if(token != NULL){
printf("token-%s\n", token);
item = malloc(strlen(token) + 1); //every item has its own heap memory
memcpy(item, token, strlen(token)+1);
}
}
}
<小时/>
输出是,
$ ./frequencyCounter.exe ARRAY
token-it
token-was
token-the
token-best
token-of
token-times
Key is:it
Key is:it
Key is:it
Key is:it
Key is:it
Key is:it
Size of list: 6
Aborted (core dumped)
<小时/>
在上面的问题代码中,我们可以重用strtok()
的结果吗?
最佳答案
虽然很难理解或阅读你的代码,但下面的代码看起来很糟糕
item = malloc(strlen(token));
然后你memcpy()
strlen(token) + 1
字节。
这将导致未定义的行为,因此您的程序将表现不稳定。
另外,不要过度使用 strlen()
它会在每次调用它时迭代输入字符串的所有字符,如果您需要使用它超过一次。
这是您的函数的改进版本
static void
copyData(List *records, char buf[], char *delim, char *argv[])
{
char *token;
size_t length;
void *item;
token = strtok(buf, delim);
if (token == NULL)
return;
length = strlen(token);
item = malloc(length + 1);
if (item == NULL)
return;
memcpy(item, token, length + 1);
printf("token-%s\n", token);
while (token != NULL) {
insertItem(records, item);
token = strtok(NULL, delim);
if (token != NULL) {
length = strlen(token);
item = malloc(length + 1); // every item has its own heap memory
if (item != NULL) {
memcpy(item, token, length + 1);
}
printf("token-%s\n", token);
}
}
// Some day, you will have to free these pointers
}
但我希望事情不只是这样,因为你malloc()
的每一个item
都永远不会被free
释放,而且,因为它有点违反了DRY原则。还有一件事,您也可以使用 strdup()
。
关于c - strtok() 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41516336/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我有实体: @Entity @Table(name = "CARDS") public class Card { @ManyToOne @JoinColumn(name = "PERSON_I
我正在尝试计算二维多边形的表面法线。我正在使用 OpenGL wiki 中的 Newell 方法来计算表面法线。 https://www.opengl.org/wiki/Calculating_a_S
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我这里有以下 XML: Visa, Mastercard, , , , 0, Discover, American Express siteonly, Buyer Pay
即将发生的 Google 政策变更迫使我们实现一个对话框,以通知欧盟用户有关 Cookie/设备标识符用于广告和分析的情况。我只想向欧盟用户显示此对话框。我不想使用额外的权限(例如 android.p
本文分享自华为云社区《华为大咖说 | 企业应用AI大模型的“道、法、术” ——道:认知篇》,作者:华为云PaaS服务小智。 本期核心观点 上车:AGI是未来5~10年内,每个人都无法回避的技
我有一个与酒精相关的网站,需要先验证年龄,然后才能让他们进入该网站。我使用 HttpModule 来执行此操作,该模块检查 cookie,如果未设置,我会将它们重定向到验证页面。我验证他们的年龄并存储
在欧盟,我们有一项法律,要求网页请求存储 cookie 的许可。我们大多数人都了解 cookie 并同意它们,但仍然被迫在任何地方明确接受它们。所以我计划编写这个附加组件(ff & chrome),它
以下在 C 和/或 C++ 中是否合法? void fn(); inline void fn() { /*Do something here*/ } 让我担心的是,第一个声明看起来暗示函数将被定义
我是一名优秀的程序员,十分优秀!