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';

NULLこれは の代入と同じではないことに注意してください。arr[1]は でcharありポインターではないため、代入することはできませんNULL

そうは言っても、それはおそらくあなたが思っていることをしないでしょう。上記の例では、期待どおりfではなく、 string が生成されます。fo

文字列から文字を削除する場合は、次のmemmoveポインター演算を使用して、文字列の内容を左にシフトする必要があります (null ターミネーターを含む)。

例:

#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に null バイトがありますか。しかし、私が知る限り、0'\0'、およびNULLはすべて等価で 0 です (間違っている場合は訂正してください)。もちろん、明確にする0ために、数値、'\0'文字と文字列、およびNULLポインターに使用する必要があります。

于 2012-09-21T17:49:58.107 に答える