2

この配列の各文字列から「\n」を削除するにはどうすればよいですか?

単純なC-Stringに対してこのようなことができることは知っていますが、この場合は使用できませんでした。

cmd[strcspn(cmd, "\n")] = '\0';

それが適切な方法であるかどうかもわかりません。

文字列の中央にスペースや\nが含まれることはありません。それらも静的な長さです(6)。

#include <stdlib.h>

unsigned char cmd[][6] = { 
    {"r123\n"},
    {"r999\n"},
    {"l092\n"},
    {"l420\n"}};

void main(void) {
    int i;

    for(i = 0; i < (sizeof(cmd) / sizeof(cmd[0])); i++) {
        printf("%s\n", cmd[i]);
    }   
}
4

4 に答える 4

2

手でやるだけで簡単!

すべての単語の最後の文字のみであることが保証され、そこにあることが保証されている場合は、次のようになります。

for (i = 0; i < elem_number; ++i){
    cmd[i][strlen(cmd[i])-1] = 0;
}

一方、最後に空白文字がいくつあるかわからないが、最後にのみ存在することがわかっている場合(この場合は0になる可能性があります!)、次のようになります。

for (i = 0; i < elem_number; ++i){
    for (j = 0; cmd[i][j] != 0; ++j){
        if (isspace(cmd[i][j]))
             cmd[i][j] = 0;
     }
}

出来上がり!

中央に空白がある場合は、目的の動作を定義する必要があります。末尾の空白のみを切り取るか、文字列を多くの小さな空白に切り取るか、まったく異なるものにします。

ああ、そしてもう1つの補足:他のみんなが使用しているようですchar = '\0'。でC'\0' and 0は同等です。つまりif ('\0' == 0) { ... }、trueと評価されます。

補足2elem_number要素の数がパラメーターであるか、ハードコードされているか/事前にわかっているかがわからなかったため、使用しました。適切なものに置き換えてください。

于 2012-05-24T08:50:03.920 に答える
1

char配列の文字をに設定する\0と、その文字の文字列が切り捨てられます。したがって、あなたの例では、5番目の文字を設定することでうまくいきます。

cmd[i][4] = '\0';

目的の文字列の長さが4未満になる可能性がある場合は、4にハードコーディングするのではなく、strlen(cmd[i])-1

于 2012-05-24T08:41:40.060 に答える
0

多分あなたは使うことができますstrrchrか?文字列に複数の改行が含まれている可能性がある場合は、ループで使用します。

于 2012-05-24T08:43:37.110 に答える
-1
    for(i = 0; i< sizeof(cmd)/sizeof(unsigned char[6]);i++)
        *strchr(cmd[i], '\n') = '\0';
于 2012-05-24T08:57:09.613 に答える