小编thp*_*rus的帖子

替换字符数组中的char

以下代码在注释行中以分段错误错误中止.该行旨在简单地替换一个字符.

#include <stdio.h>
#include <ctype.h>

int num(char zf[], int n) {
    int i;

    for (i = 0; i < n; i++) {
        // assignment = seg fault
        if (zf[i] == ',') zf[i] = '.';

        if (!isdigit(zf[i]) && zf[i] != '+' && zf[i] != '-' && zf[i] != '.') {
            return 0;
        }
    }

    return 1;
}

int main(void) {
    if (num("-3+3,0", 6)) {
        printf("valid\n");
    } else {
        printf("not valid\n");
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个解释为什么会出现错误以及解决方案是什么?strncpy()函数?函数num的参数和数据类型不能更改.

c

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

在C中实现哈希表

我在用C实现一个简单列表时遇到麻烦,问题是通过指针连接项目。
下面的代码是哈希表的一部分,该哈希表应将具有相同索引的项目存储在列表中,以避免发生冲突。

typedef struct dictEntry {
    void *key;
    void *value;
    struct dictEntry *next;
} dictEntry;

typedef struct dict {
    dictEntry **table;
    unsigned long size;
    unsigned long used;
} dict;

void dictAdd(dict *d, void *key, void *value) {
    int index = hash(key) & d->size;
    dictEntry *entry;

    entry = malloc(sizeof(entry));

    entry->key   = key;
    entry->value = value;
    entry->next  = 0;

    if (d->table[index]) {
        /* this is does not work */
        dictEntry *next;
        next = d->table[index];

        while (next) {
            next = next->next;
        }

        next …
Run Code Online (Sandbox Code Playgroud)

c pointers hashtable linked-list

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

通过链表进行迭代会导致分段错误

我只是编写了一个简单的链表,但是当通过列表迭代add()并且display()程序seg出错时.

#include <stdlib.h>
#include <stdio.h>

typedef struct entry {
    void *value;
    struct entry *next;
} entry;

typedef struct list {
    entry *items;
} list;

list *create(void) {
    list *l;

    l = malloc (sizeof(list));
    l->items = malloc(sizeof(entry*));
    l->items->next = NULL;

    return l;
}

void add(list *l, void *value) {
    entry *temp, *last, *new;

    for (temp = l->items; temp != NULL; temp = temp->next) {
        last = temp;
    }

    new = malloc(sizeof(*new));

    new->value = value;
    new->next = NULL; …
Run Code Online (Sandbox Code Playgroud)

c list

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

标签 统计

c ×3

hashtable ×1

linked-list ×1

list ×1

pointers ×1