2013-03-01 56 views
0

親愛的朋友, 我是新來的,請檢查我的一段代碼。我的意圖是將名稱複製到結構數組元素中。我是c新手,無法理解發生了什麼......請引導我?試圖使用自己的strcpy並複製一個數組元素不工作?

#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; 


} 
+2

編譯警告,然後修復它們。 – netcoder 2013-03-01 03:54:29

+0

你的函數是'char * myStringcopy(char * dst,const char * src)',但你把它叫做'myStringcopy(my_str,new_st1-> name [0])''。源和目標參數相反。 – 2013-03-01 03:57:00

+0

只是爲了澄清:顛倒的參數不是唯一的問題。正如netcoder所說,這些問題將由編譯器警告揭示。 – 2013-03-01 04:07:43

回答

1

在這個函數char *myStringcopy(char *dst, const char *src)你的第一個參數是目的地。但是你用源地址作爲第一個參數來調用這個函數。

您遞增目的地址,而條件,並在同時身體*dst++=*src++;

你而條件檢查的內容等於NULL

String數組decalration應該是這樣的char *my_str[] = {"HelloWord", "MY var1", "my var2"};兩次INT函數在循環while(*dst++!=NULL)

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; 
} 

這是你想要的嗎?

編輯:現在的解釋。

+0

謝謝Careal Manic,是的,這正是我期待的......但是在C中知識很少......不明白它出錯的地方......謝謝! – studyembedded 2013-03-01 04:28:17

+0

嗨Careal,你可以請解釋我'code' while(* dst ++!= NULL)'code'這一步請嗎? – studyembedded 2013-03-01 04:32:14

+0

'while(* dst ++!= NULL)'不會工作,因爲在你的情況下'dst [0]'很可能是'NULL'(即''\ 0'')。這樣,'* dst ++ = * srC++;'不會被執行。 Off主題:你應該用兩個''來附上你的代碼。 – 2013-03-01 04:36:47

相關問題