0

サイズ100の文字配列を空白に設定してから、10個のチャーターを他の同じ文字列にコピーするにはどうすればよいですか。例えば:

1つのchar配列がありますa[100]実行するには:すべてを空白に設定します

ここで、別の配列があります:b [10](これが長さ9の文字列で埋められていると仮定します)実行方法:この配列を前の配列にコピーします

What iam doing is : memset(a, ' ', sizeof(a));
350         memcpy(a,b, strlen(b))

しかし、10文字がコピーされた後、iamが設定したスペースを取得していません。

4

4 に答える 4

1

次のことを試してください。

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

#define LENGTH 100

int main(int argc, char *argv[])
{
    char *a = NULL;
    char b[10] = "abcdefghi"; /* note that this has a trailing null character */

    a = malloc(LENGTH + 1);
    if (a) {
        *(a + LENGTH) = '\0';
        memset(a, ' ', LENGTH);
        fprintf(stdout, "a (before):\t[%s]\n", a);
        memcpy(a, b, sizeof(b) - 1); /* strip trailing null */
        fprintf(stdout, "a (after):\t[%s]\n", a);
        free(a);
    }

    return EXIT_SUCCESS;
}

これを実行する:

$ gcc -Wall test.c
$ ./a.out
a (before):     [...100 spaces...........]
a (after):      [abcdefghi...91 spaces...]                                                                                           ]
于 2012-01-13T12:26:56.733 に答える
0

わかるでしょ。次のコードを試してください。

for (int i = 0; i <= 99; i++)
    printf("%c", a[i]);
printf("\n");

その理由はmemcpy、文字列を。にするaと、ヌル文字が。に配置されるためa[10]です。を出力するだけの場合a、出力はNULLの直前で停止します。

于 2012-01-13T12:23:59.263 に答える
0

\0配列の最後の位置にヌル文字がありません。

于 2012-01-13T12:27:05.237 に答える
0

キャストを入力する必要があると思いませんか(char *)

a = (char *) malloc(LENGTH + 1);
于 2013-10-19T01:34:43.290 に答える