如何在C程序中将数组中的元素设置为null

时间:2012-09-21 17:22:11

标签: c arrays unix null element

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

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

请注意,这与分配NULL不同,因为arr[1]char而不是指针,您无法为其分配NULL

那就是说,这可能不会做你想象的那样。上面的示例将生成字符串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 */

答案 2 :(得分:0)

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

相关问题