【发布时间】:2013-06-05 14:41:24
【问题描述】:
我正在尝试在 C 中标记字符串并使用 strtok_r 将标记保存到多个变量中。据我所知,我完全按照文档使用它:
char *saveptr;
char *ticketuser = strtok_r(request, ":", &saveptr);
char *ticketservice = strtok_r(NULL, ":", &saveptr);
char *ticketkey = strtok_r(NULL, ":", &saveptr);
//And so on...
其中 'request' 是一个以冒号分隔的标记字符串。当我尝试编译时,在我分配一个字符串的每一行上,我都会得到“赋值使指针从没有强制转换的整数”。由于 strtok_r 应该返回一个 char*,所以我看不出问题出在哪里。
编辑:这是我的所有代码:
#include <stdio.h>
char *add( char *request ) {
char *name = "add";
char *secret = "secret1";
char *failcode = "0:add:0";
char returncode[80];
char *saveptr;
char *username = strtok_r(request, ":", &saveptr);
char *servicename = strtok_r(NULL, ":", &saveptr);
int parameter1 = atoi(strtok_r(NULL, ":", &saveptr));
int parameter2 = atoi(strtok_r(NULL, ":", &saveptr));
int ticketlead1 = atoi(strtok_r(NULL, ":", &saveptr));
char *ticketuser = strtok_r(NULL, ":", &saveptr);
char *ticketservice = strtok_r(NULL, ":", &saveptr);
char *ticketkey = strtok_r(NULL, ":", &saveptr);
//Catch any issues with the request
if (strcmp(username,ticketuser) != 0){
printf("username did not match ticket username\n");
return failcode;
}//if
else if (strcmp(servicename,ticketservice) != 0){
printf("service name did not match ticket service name\n");
return failcode;
}//else if
else if (strcmp(secret,ticketkey) != 0){
printf("secret key did not match ticket secret key\n");
return failcode;
}//else if
//request was good, return value
else{
int val = parameter1 + parameter2;
sprintf(returncode, "1:add:%d", val);
return returncode;
}//else
}//add
int main( int argc, char **argv ) {
char *returned;
char *req = "user:serv:5:8:1:user:serv:secret1";
returned = add(req);
printf(returned);
printf("\n");
return 1;
}//main
【问题讨论】:
-
应该没问题 (ideone.com/Dty4x7);你需要发布一个完整的测试用例。
-
你忘了
#include <string.h>。但你也应该使用-Wall -Werror进行编译,因为那会告诉你这件事...... -
拍脑门 谢谢。我有一种感觉,它会是这样的。我正在使用 -Wall 进行编译,但我想我现在必须添加 -Werror。
-
-Werror只会导致所有警告变成错误,从而阻止编译成功。它非常有用!我也推荐-Wextra。 -
我明白了,谢谢。 -Wextra 是做什么的?
标签: c string variable-assignment strtok