0

私はCにまったく慣れておらず、ファイル全体の配列変数に関数の結果を入力しようとしています。これは、私が何を意味するのかを示す簡単なコードサンプルです。これが機能しない理由を誰かに教えてもらえますか?

#include <sys/types.h>
#include <dirent.h>
#include <regex.h>
#include <stdio.h>
#include <gtk/gtk.h>
#include <string.h>
#include <unistd.h>
#include <pwd.h>

static gchar *external_names;

void directories(int arraylength, gchar internal_names[][100]){
    int n;
    for (n = 0; n < arraylength; n++)
    {
        strcpy(external_names[n], internal_names[n]);
    }
    for (n = 0; n < arraylength; n++)
    {
        printf("%s internal with %s external\n",internal_names[n], external_names[n]);
    }
}

void main()
{
    gchar anotherarray[10][100];
    directories(10, anotherarray);
}

[編集]最新のコード

#include <sys/types.h>
#include <dirent.h>
#include <regex.h>
#include <stdio.h>
#include <gtk/gtk.h>
#include <string.h>
#include <unistd.h>
#include <pwd.h>

static gchar *external_names[100];

void directories(int arraylength, gchar internal_names[][100]){
    int n = 0;
    //gchar external_names[arraylength][100];
    for (n = 0; n < arraylength; n++)
    {
        printf("%s %i\n","before", n);
        strcpy(external_names[n], internal_names[n]);
        printf("%s %i\n","after", n);
    }
}

void main()
{
    int n;
    gchar anotherarray[10][100];
    for (n = 0; n < 10; n++)
    {
        strcpy(anotherarray[n],"test");
    }
    directories(10, anotherarray);
    for (n = 0; n < 10; n++)
    {
        printf("%s internal with %s external\n",anotherarray[n], external_names[n]);
    }
}
4

2 に答える 2

2
static gchar *external_names;  //one dimensional array.

external_namesは 1 次元配列であり、2 次元配列internal_namesから割り当てようとしています。

strcpy(external_names[n], internal_names[n]);

これは、インデックスをインクリメントするとどうなるかです。

&internal_names[1] =  &internal_names[0] + size_t*100
&external_names[1] =  &external_names[0] + size_t*1

これを解決するには、

static gchar (*external_names)[100];

動作するはずです。

于 2013-01-23T11:13:14.560 に答える
1

これ:

static gchar *external_names;

あなたのような文字列の配列ではありませんanotherarray

呼び出しでインデックスを作成するstrcpy()と、最初の引数は aであり、は 2 つのポインターを想定charしているため、これは間違っています。strcpy()

于 2013-01-23T11:13:13.133 に答える