0

親愛なる友人、私はここに来たばかりです。私のコードをチェックしてください。私の意図は、名前を構造配列要素にコピーすることです。私は c に不慣れで、何が起こっているのか理解できません...ガイドしてください。

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

typedef struct new_st{

      const char name[100];
      int value;

    }var1;

char *myStringcopy(char *dst, const char *src)
{
         char *ptr;
         ptr  = dst;
        while(*dst++!=NULL)
        {
           *dst++=*src++;
          }

        return(ptr);
 }

 int main()
{

   char my_str[] = {"HelloWord", "MY var1", "my var2"};

   var1 *new_st1;


   new_st1 = malloc(sizeof(struct new_st));


     //trying just first name then i thought of using for loop for rest


      myStringcopy(my_str, new_st1->name[0]);

       printf("%s\n",new_st1->name[0]);



   return 0;


}
4

2 に答える 2

1

この関数 char *myStringcopy(char *dst, const char *src)では、最初の引数は宛先です。ただし、ソースアドレスを最初の引数としてこの関数を呼び出しています。

while(*dst++!=NULL)while条件とwhile本体のループで、宛先アドレスをint関数の2倍に増やしています*dst++=*src++;

あなたの while 条件は等しいコンテンツをチェックしていますNULL

文字列配列のデカルレーションは次のようにする必要があります char *my_str[] = {"HelloWord", "MY var1", "my var2"};

于 2013-03-01T04:13:31.800 に答える
1

率直に言って、あなたのコードには多くの論理エラーがあるようです。これが私の修正です:

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

typedef struct new_st{
    char name[100]; //It should not be const because the content inside the array is intended to be modified.
    int value;
}var1;

char *myStringcopy(char *dst, const char *src) 
{
        char *ptr;
        ptr  = dst;
        while(*src!='\0') //src should be copy until a '\0' in src is reach.
           *dst++=*src++;
        *dst='\0'; //making dst a null-terminated string

        return(ptr);
 }

int main()
{

    const char* my_str[] = {"HelloWord", "MY var1", "my var2"}; //I have no idea why your code in this line even compile. The type of my_str should be char**, or an array of char* . Also, you should use const if the string will not be modified.
    var1 *new_st1;

    new_st1 = malloc(sizeof(struct new_st));
    myStringcopy(new_st1->name, my_str[0]); //new_st1->name[0] is a char. There is no reason to copy a char. Instead, you should copy a char* . I *guess* that you want to copy stuffs from my_str[n] to new_st1->name
    printf("%s\n",new_st1->name); //%s accepts a string(i.e. char*) , while new_st1->name[0] is a char. In this case, new_st1->name should be passed as a parameter, instead of new_st1->name[0]
    free(new_st1); //you should free() it after allocating memory with malloc() to avoid memory leak.
    return 0;
}

これは、あなたの望むことですか?

編集:説明付き。

于 2013-03-01T04:14:47.277 に答える