私はポインターに非常に苦労しています。私が達成しようとしている音は、私の耳にはかなり単純です。多次元のchar配列を定義しますが、そのサイズは定義しません。次に、2番目のメソッドで必要なメモリを割り当て、要求されたデータで埋めます.
今、私はこれを達成するために数え切れないほどの時間を試み、目が乾くまでGoogleで検索しましたが、まだ修正できていません. そのため、これがどのように可能になるかについて、あなたの誰かが何か洞察を持っていることを望んでいました.
私が想像しているのは、ポインターと、メソッドで使用されるchar** files
カウンターを定義することです。次に、印刷ファイルが変数を calloc および malloc し、関連するデータを入力します。int total_files
print_files()
以下のコードでは、これを試みました。ただし、実行時に、「セグメンテーション違反 (コアダンプ)」という非常に詳細なメッセージが表示されます。GDB でデバッグすると、次の場所を指します。
13 *files[i] = malloc(sizeof(char) * 100);
さて、これは C プログラミング (Linux 用) の入門コースであり、ここで多数のエラーが表示される可能性があります。お時間をいただきありがとうございます。メソッド/ポインターなしでコードを機能させるのに問題はなかったので、何らかの形で構文を混同している可能性があると確信しています。
#define _SVID_SOURCE
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<dirent.h>
#include <time.h>
int print_files(char*** files, int* total_files) {
int size = 10;
**files = calloc(size, sizeof(char *));
for(int i = 0; i < size; i++) {
*files[i] = malloc(sizeof(char) * 100);
}
*total_files = size;
}
int main() {
char** files;
int num_files;
num_files = 0;
printf("-- Start print_files\n");
print_files(&files, &num_files);
printf("-- end print_files, number of files: %d\n", num_files);
for(int i = 0; i < num_files; i++)
printf("Out: %s\n", files[i]);
printf("total_files=%d\n", num_files);
return 0;
}