C 如何打印结构的字段
我正在尝试用C打印结构的字段,但遇到了问题。 我有两个问题 首先,当我试图打印名为“math”的课程的字段“courseName”时,我得到:“(null)math══════════════════════════" 其次,当我试图打印字段courseNumber时,它会打印courseNumber和courseName。 有人能告诉我我做错了什么吗C 如何打印结构的字段,c,linked-list,C,Linked List,我正在尝试用C打印结构的字段,但遇到了问题。 我有两个问题 首先,当我试图打印名为“math”的课程的字段“courseName”时,我得到:“(null)math══════════════════════════" 其次,当我试图打印字段courseNumber时,它会打印courseNumber和courseName。 有人能告诉我我做错了什么吗 struct Course { char courseNumber[6]; char courseName[30]; s
struct Course {
char courseNumber[6];
char courseName[30];
struct Course* next;
};
struct Course* updateCoursesList(char courseDetails[], struct Course* coursesList)
{
struct Course* head = NULL;
int i = 6, j = 0;
if (coursesList == NULL) {
coursesList = (struct Course*)malloc(sizeof(struct Course));
if (coursesList == NULL)
return NULL;
head = coursesList;
strncpy(coursesList->courseNumber, courseDetails, 5);
coursesList->next = NULL;
while (courseDetails[i] != '\n') {
coursesList->courseName[j] = courseDetails[i];
i++;
j++;
}
}
else {
head = coursesList;
if (strncmp(courseDetails, coursesList->courseNumber, 5) == 0) {
while (courseDetails[i] != '\n') {
coursesList->courseName[j] = courseDetails[i];
i++;
j++;
}
return head;
}
while (coursesList->next != NULL) {
if (strncmp(courseDetails, coursesList->courseNumber, 5) == 0) {
while (courseDetails[i] != '\n') {
coursesList->courseName[j] = courseDetails[i];
i++;
j++;
}
return head;
}
else
coursesList = coursesList->next;
}
coursesList->next = (struct Course*)malloc(sizeof(struct Course));
if (coursesList->next == NULL)
return head;
strncpy(coursesList->next->courseNumber, courseDetails, 5);
coursesList->next->next = NULL;
while (courseDetails[i] != '\n') {
coursesList->next->courseName[j] = courseDetails[i];
i++;
j++;
}
}
return head;
}
int main()
{
struct Course* coursesList = NULL;
char array[30] = "12345 math\n";
coursesList = updateCoursesList(array, coursesList);
printf("%s", coursesList->courseNumber);
printf("%s", coursesList->courseName);
}
实际上,您可以使用
strncpy
来复制courseNumber
和courseName
,因为两者都是字符串
strncpy
不会使用\0
终止符终止复制的字符串,因此我们在末尾添加了\0
对于您的输入char数组[30]=“12345 math\n”
请执行以下操作
strncpy(coursesList->courseNumber, courseDetails, 5);
coursesList->courseNumber[5] = '\0';
//since your courseName is also string, you need not do piece by piece copy
strncpy(coursesList->courseName, courseDetails+6, 5);
coursesList->courseName[5] = '\0';
在if
和else
两部分中都不需要以下代码
while (courseDetails[i] != '\n')
{
coursesList->courseName[j] = courseDetails[i];
i++;
j++;
}
注意:但是这种非常奇怪的读取输入的方式,取而代之的是从
stdin
获取输入并使用它们,因为所有课程的长度可能不同。在C中,字符串需要以NUL结尾。strncpy(coursesList->courseNumber,courseDetails,5);
这不会导致以NUL结尾的字符串。需要类似于coursesList->courseNumber[5]='\0';
未定义的越界访问行为。@kaylum谢谢你。它解决了我的两个问题。