0

初歩的すぎてすみませんが、以下のようにstrcpyのライブラリ関数を実装してみました。strncat()

#include <stdio.h>

void strncat (char *s, char *t, int n) {
// malloc to extend size of s
s = (char*)malloc (strlen(t) + 1);

// add t to the end of s for at most n characters
while (*s != '\0') // move pointer
    s++;

int count = 0;

while (++count <= n)
    *s++ = *t++;

*(++s) = '\0';
}

int main () {
char *t = " Bluish";
char *s = "Red and";

// before concat
printf ("Before concat: %s\n", s);

strncat(s, t, 4);

// after concat
printf ("After concat: %s\n", s);

return 0;
}

コンパイルして正常に実行されます...ただし、まったく連結されません!

フィードバックをお寄せいただきありがとうございます...ありがとう!

4

1 に答える 1

3

malloc で s ポインターを再定義したようです。これを行ったので、最初の連結文字列を指していません。

まず、関数の戻り値の型は char* にする必要があります

char* strncat (char *s, char *t, int n)

その後、ローカルのcharポインターを作成する必要があると思います。

char* localString;

このポインターでスペースを割り当てるために malloc を使用する

localString = malloc (n + strlen(s) + 1); 

ここで型キャストを行う必要はありません。malloc 自体が行うためです。

実際、ここでは strlen(t) ではなく、サイズ パラメータ (n) を使用する必要があります。

そして、このポインタですべての連結操作を行った後、それを返します

return localString
于 2012-04-28T06:16:22.310 に答える