我有这个:
struct cella {
char *token;
struct cella *next;
};
typedef struct cella *ListaToken;
ListaToken tokenize(char *s) {
ListaToken l;
int i;
while (s[i]){
l = (ListaToken)malloc(sizeof(ListaToken));
l->next = s[i];
i++;
}
l->next = NULL;
return l;
}
在“l->next = s[i];”中我收到警告:赋值使指针来自整数而不进行强制转换[默认启用]。 我已经尝试过多次更改它,但我遇到了一些问题,我的C语言不太好。我应该如何更改它? 谢谢。
编辑:我想要这样的东西来构建逆波兰表示法计算器:
tokenize("12 17 + 4 3 -/") = "12"-> "17"-> "+"-> "4"-> "3"-> "-"-> "/"-> 空
tokenize("12 17 + 4 -/") = "12"-> "17"-> "+"-> "4"-> "-"-> "/"-> NULL
这是该程序的第一部分。
最佳答案
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct cella {
char *token;
struct cella *next;
} *ListaToken;
ListaToken tokenize(const char *s) {
ListaToken top = NULL, current, l;
char *p, *tmps = strdup(s);
for(p=strtok(tmps, " ");p;p=strtok(NULL, " ")){
l = malloc(sizeof(*l));
l->token = strdup(p);
l->next = NULL;
if(top == NULL){
current = top = l;
} else {
current->next = l;
current = l;
}
}
free(tmps);
return top;
}
void print(ListaToken l){
while(l){
printf("\"%s\" -> ", l->token);
l = l->next;
}
printf("NULL\n");
}
int main(){
ListaToken list1, list2;
list1 = tokenize("12 17 + 4 3 - /");
print(list1);
list2 = tokenize("12 17 + 4 - /");
print(list2);
return 0;
}
<小时/>
char *mystrdup(const char *s){
char *dup = malloc(strlen(s) + 1);
return strcpy(dup, s);
}
char *mystrtok_r(char *str, const char *delims, char **store){
char *p, *wk;
if(str != NULL){
*store = str;
}
if(*store == NULL) return NULL;
*store += strspn(*store, delims);//skip delimiter
if(**store == '\0') return NULL;
p=strpbrk(wk=*store, delims);
if(p != NULL){
*p='\0';
*store = p + 1;
} else {
*store = NULL;
}
return wk;
}
char *mystrtok(char *str, const char *delimis){
static char *store;
return mystrtok_r(str, delimis, &store);
}
<小时/>
ListaToken tokenize(const char *s) {
ListaToken top = NULL, current, l;
const char *p = s, token[16];
int len=0;
while(1==sscanf(p, "%15s%n", token, &len)){
l = malloc(sizeof(*l));
l->token = malloc(len + 1);
strcpy(l->token, token);
p += len;
l->next = NULL;
if(top == NULL){
current = top = l;
} else {
current->next = l;
current = l;
}
}
return top;
}
关于c - 警告 TokenList 类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22982985/