2つの文字列を文字通り結合するC言語で、ポインタと配列について少しだけ学ぶために、単純なstr_join
関数を作りたかったのです。C - 独自のstr_join関数が機能しない
#include <stdio.h>
#include <stdlib.h>
int str_size(char *str);
void str_join(char *str1, char *str2);
int main(int argc, char **argv)
{
char *part1 = "Hello ";
char *part2 = "World!";
str_join(part1, part2);
printf("%s\n", part1);
return 0;
}
int str_size(char *str)
{
char c;
for(int i = 0;; i++)
{
c = str[i];
if(c == '\0')
return i + 1;
}
}
void str_join(char *str1, char *str2)
{
int str_size_1 = str_size(str1) - 1; //Last char is '\0', don't need them 2 times
int str_size_2 = str_size(str2);
char str3[str_size_1 + str_size_2];
int i;
for(i = 0; i < str_size_1; i++)
str3[i] = str1[i];
for(i = 0; i < str_size_2; i++)
str3[i + str_size_1] = str2[i];
str1 = (char *)str3;
}
(単純すぎるかもしれません)単純です。 私がする出力を除外:
Hello World
が、それは次のようになります。私は、以下のコマンドを使用してプログラムをコンパイル
Hello
:
gcc main.c -o main
そして、それを実行しました:
./main
私は自分の失敗を見ない、誰かが私のエラーに私を向けることができますか? 私を助けてくれてありがとう!
私はstr1のアドレスをstr3のアドレスに変更していませんか? – l1677783
@ l1677783 str1は関数内のローカル変数です(関数の引数はローカル変数のように動作します)。 'str1 =(char *)str3'は、そのローカル変数がstr3を指すように変更します。あなたはmain()にあるpart1変数を変更していません。 main()はpart1ポインタのコピーをstr_join()関数に渡します。 (注、ポインタのコピーではなく、ポインタが指すもののコピー) – nos
@ l1677783ええ、あなたですか?もう一度チェック.... –