0

文字列内の改行 '\n' を削除したい。

 char *string ="hallo\n";

    int i=0;
    int length = sizeof(string);

    while(i<length)
    {
        if(string[i+1] == '\n')
        {
            string[i+1] = '\0';
            break;
        }   
        i++;
    }

    printf("%s",string);
    printf("world");

新しい配列を生成するだけで、次のように機能することを知っています

char *string ="hallo\n";

int i=0;
int length = sizeof(string);
int lengthNew = length -1;
 char newStr[lengthNew];
    while(i<length)
    {
        printf("Char ist %c:",string[i]);
        newStr[i] = string[i];
        if(string[i+1] == '\n')
            break;
        i++;
    }

しかし、古い配列の 1 文字を置換できるのに、なぜスタックを使用するのでしょうか?

4

3 に答える 3

3

あなたのコメントに基づいて、私は完全に異なるがより良い解決策を提供しますstrftime::

time_t clock = time(NULL);

char buf[1024];

strftime(buf, sizeof buf, "%c", localtime(&clock);

printf("The date is: %s\n", buf);

%c形式は で使用されているものと同じですが、ctimeより柔軟strftimeです。

于 2012-09-16T19:07:15.300 に答える
2

改行が常に文字列の最後の文字である場合は、説明したようにコーディングできます。

それ以外の場合は、2 番目の文字バッファーを作成し、文字を 2 番目のバッファーにコピーする必要があります。これは、C では\0文字が文字列の終わりを示すためです。

このような文字列がある場合: "this \n is \n a \n test"、置換後のメモリは次のようになります: "this \0 is \0 a \0 test"。ほとんどの C プログラムは単純にこれを文字列として解釈し"this "、最初の null の後のすべてを無視します。

編集 他の人が指摘したように、コードには他の問題もあります。sizeof() は、文字列の長さではなく、文字ポインタのサイズを返します。また、読み取り専用の文字列リテラルを変更することもできません。

于 2012-09-16T18:53:48.427 に答える
-2
char *string = ctime(&myTimeT);
char *c = strrchr(string, '\n');

if (c != NULL)
    *(c) = '\0';
于 2012-09-16T18:54:27.753 に答える