メイン以外の関数で連結された文字列がメイン関数で出力された理由を理解するのが困難です。つまり、このプログラムは、2 つの char 配列の連結を説明するために設計されました。
#include <stdio.h>
void concat(char result[], const char str1[], int n1, const char str2[], int n2)
{
int i, j;
// copy str1 to result
for (i = 0; i < n1; ++i)
{
result[i] = str1[i];
}
// copy str2 to result
for (j = 0; j < n2; ++j)
{
result[n1 + j] = str2[j];
}
}
int main(void)
{
void concat(char result[], const char str1[], int n1, const char str2[], int n2);
const char s1[5] = { 'T', 'e', 's', 't', ' ' };
const char s2[6] = { 'w', 'o', 'r', 'k', 's', '.' };
char s3[11];
int i;
concat(s3, s1, 5, s2, 6);
for (i = 0; i < 11; ++i)
{
printf("%c", s3[i]); // Here is what I do not understand: how was the s3 array
// accessible since it was not returned from concat
}
printf("\n");
return 0;
}
私が理解しているように、関数が値を返すか、配列/変数がグローバルに宣言されていない限り (これは避けるべきものです: 狭いスコープが必要です)、配列/変数はメインに「見える」べきではありませんか? これは正しくありませんか?メインが印刷するために使用する関数からs3を返す必要があると思ったからです。