My program replaces all the string data types in all the nodes in the linked list

≯℡__Kan透↙ 提交于 2019-12-02 04:24:21
user3386109

The scanf stores strings in variables a and b. The pointers to a and b are then passed to the addjob function. Then the addjob function copies the pointers into the structure. The structure just has a pointer to the buffers. It does not have a copy of the strings. The next time that scanf is called it overwrites the contents of the buffer, and the first strings are lost.

The solution is to make a copy of the strings, which you can do three ways

1) declare the struct as

struct history{
   char department1[10];
   char title1[10];
   ...

and then use strcpy to copy the strings into the structure.

2) use strdup to make a duplicate of the strings

new->department1 = strdup(department);
new->title1 = strdup(title);

The issues with strdup: it's a non-standard function, and you have to free the memory when you're done with the strings.

3) use malloc and strcpy to duplicate the strings

new->department1 = malloc( strlen(department) + 1 );
strcpy( new->department1, department );
new->title1 = malloc( strlen(title) + 1 );
strcpy( new->title1, title );

This is slightly more work than strdup but only uses standard functions. You still have to free the memory when you're done with the strings.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!