小编use*_*966的帖子

从void*转换为struct

我将struct Person类型的数据传递给链表,因此每个节点的数据指针指向一个结构Person.

struct Person {
char name[16];
char text[24];
};
Run Code Online (Sandbox Code Playgroud)

我试图遍历列表并通过调用打印每个节点中的名称/文本

traverse(&list, &print);
Run Code Online (Sandbox Code Playgroud)

遍历的原型是:

void traverseList(struct List *list, void (*f)(void *));   
Run Code Online (Sandbox Code Playgroud)

列表定义为:

struct List {
struct Node *head;
};
Run Code Online (Sandbox Code Playgroud)

我的print函数接受void*数据:

print(void *data) { .... }
Run Code Online (Sandbox Code Playgroud)

我知道我必须将数据转换为struct Person,对吗?

struct Person *person = (struct Person *)data;
printf("%s", person->name);
Run Code Online (Sandbox Code Playgroud)

我知道这是不够的,因为我得到了"从不兼容的指针类型初始化"警告.在这种情况下,如何成功投出空白*?谢谢.

c struct void-pointers

5
推荐指数
1
解决办法
1万
查看次数

在C中解析一个字符串

我想解析一个字符串并对字符串的最后一个字符进行一些检查.例如:

char *name = "angela";

int i;
for(i = 0; i <= strlen(name); i++) {
    if(name[i] == 'a' && i == strlen(name)) {
        *do something here*;
     }
}
Run Code Online (Sandbox Code Playgroud)

我试过这个,但没有任何反应.为什么这不起作用?

c string parsing

2
推荐指数
1
解决办法
191
查看次数

功能

我想知道 C 中的 toupper() 函数是如何工作的。我正在下面的代码中尝试它,但我肯定做错了什么。代码可以编译,但传递给 toupper() 的参数没有大写...

char **copyArgs(int argc, char **argv) {
    char **a = malloc(sizeof(char *) * (argc));

    int i;
    for(i = 0; i < argc; i++) {
        int size = strlen(argv[i]);
        a[i] = malloc(sizeof(char) * (size + 1));
        strcpy(a[i], argv[i]);
        a[i] = toupper(a[i]);
    }
    return a;
}
Run Code Online (Sandbox Code Playgroud)

如果我用“一二”测试它,结果是“一二”,而不是“一二”。任何建议表示赞赏。

c uppercase toupper

0
推荐指数
1
解决办法
2071
查看次数

标签 统计

c ×3

parsing ×1

string ×1

struct ×1

toupper ×1

uppercase ×1

void-pointers ×1