0

こんにちは、私は C に慣れていないので、C のすべての本質的なことを理解するのに苦労しています。Structure を試している間、値と参照によって構造を関数に渡そうとするコードを書くことができました。しかし、私は何か間違ったことをしていると思います...友達を助けてください...構造に関する適切な詳細なチュートリアルに私を導いてくれれば、それは大きな助けになるでしょう...ありがとう

 #include <stdio.h>
 #include <stdlib.h>

 struct foo{
        char arr[200];

        int x_val;
        int y_val;

        float result;

        };

 struct foo my_foo;

 int foo_fun(struct foo var);        //proto declearation 

 int foo_fun1(struct foo *var1);    //proto declearation 

 int main()
 {
     //As I was not getting prover string printed by using function foo_fun1
     // I have tried to print directrly calling another ptr here 

     int i = 0;

     struct foo *ptr;

     ptr = (struct foo *)malloc(sizeof(struct foo)*10);

     ptr->arr[0] = "calculator";

     printf("Ptr zero contains a string %s\n",ptr->arr[0]); //even here prints wrong value


     i = foo_fun(my_foo);

     printf("Result from foo_fun is %d\n",i);

    //Expecting this function to print string ....but getting some unexpected result

    foo_fun1(&my_foo);

    system("pause"); 

    return 0;  

 }

 // pass by value 

 int foo_fun(struct foo var)
 {
     int i;
     int total = 0;


for(i=0;i<sizeof(var.arr); i++)

            { var.arr[i] = i;

              total = total+var.arr[i];
             }
     var.x_val = 230;
     var.y_val = 120;

     return total;

     }

 // pass by reference  

 int foo_fun1(struct foo *var1)
 {
     int i = 0;

     var1 = (struct foo *)malloc(sizeof(struct foo)*20);

     var1->arr[0] = "A";

     printf("%s\n",var1->arr);

     return 0;


     }
4

3 に答える 3

4

以下は間違っています。

ptr->arr[0] = "calculator";

(ところで、コンパイラはこれについて警告しているはずです。)

strcpy()代わりに使用する必要があります。

同様の構造を使用している他の場所にも同じことが言えます。

最後に、malloc()インfoo_fun1()は不要です。関数の引数の値を上書きしているだけでなく (なぜ?)、メモリ リークも発生しています。

于 2013-03-20T10:19:30.167 に答える
1

この線

ptr->arr[0] = "calculator";

は間違っています。文字列を単一の文字に割り当てることはできません。それがptr->arr[0]表すものです。

ptr->arr = "calculator";

そのように文字列を char 配列に代入することはできないため、strcpy()を使用する必要があります。



printf("Ptr zero contains a string %s\n",ptr->arr[0]);

する必要があります

printf("Ptr zero contains a string %s\n",ptr->arr);

単一の文字ではなく配列を出力しているため

于 2013-03-20T10:22:28.647 に答える
1

コードの 3 つの問題:

malloc()-からの戻り値をキャストしてはいけません

定数文字列をインデックス付き配列に割り当てようとしています-したがって、そうする必要があります

strcpy(ptr->arr, "calculator");strcpy(var1->arr,"A");

また、コードに大量のメモリ リークがあります。free()どこにも電話しない。

于 2013-03-20T10:25:08.643 に答える