2

我正在 Unix 中编写 C 程序,但无法弄清楚如何将数组元素设置为 NULL。我需要能够这样做以从字符串中删除多个字符。

4

3 回答 3

7

您不能分配null给特定的 char 数组索引,因为该索引表示的值是 char 而不是指针。但是如果您需要从给定字符串中删除特定字符,您可以按如下方式实现

void removeChar(char *str, char garbage) {

    char *src, *dst;
    for (src = dst = str; *src != '\0'; src++) {
        *dst = *src;
        if (*dst != garbage) dst++;
    }
    *dst = '\0';
}

测试程序

#include<stdio.h>
int main(void) {
    char* str = malloc(strlen("abcdef")+1);
    strcpy(str, "abcdbbbef");
    removeChar(str, 'b');
    printf("%s", str);
    free(str);
    return 0;
}

输出

acdef
于 2012-09-21T17:33:10.393 回答
2

如果您有char[],您可以使用以下方法将单个元素归零:

char arr[10] = "foo";
arr[1] = '\0';

请注意,这与 assigning 不同NULL,因为arr[1]它是 achar而不是指针,因此您不能NULL对其进行分配。

也就是说,这可能不会像你想象的那样做。上面的示例将生成 string f,而不是fo您似乎期望的那样。

如果要从字符串中删除字符,则必须使用memmove和一些指针算法将字符串的内容向左移动(包括空终止符):

例子:

#include <stdio.h>
#include <string.h>

int removechars(char *str, size_t pos, size_t cnt) {
    size_t len = strlen(str);
    if (pos + cnt > len)
        return -1;

    memmove(str + pos, str + pos + cnt, len - pos - cnt + 1);
    return 0;
}

然后像这样使用它:

char str[12] = "hello world";
if (removechars(str, 5, 4) == 0)  /* remove 4 chars starting at str[5] */
    printf("%s\n", str);          /* hellold */
于 2012-09-21T18:56:19.053 回答
0

如果你在谈论一个指针数组(比如char **),你只会说array[element] = NULL;. 但听起来好像你真的只想截断一个字符串 ( char *),在这种情况下你实际上想要写string[index] = '\0'\0空字节在哪里。但是,据我所知,0'\0'NULL都等价且等于 0(如果我错了,请纠正我)。当然,为了清楚起见,您应该使用0数字、'\0'字符和字符串以及NULL指针。

于 2012-09-21T17:49:58.107 回答