C语言结构体字符串传递问题:strcpy无法正常赋值读取
问题分析与修复
你的代码核心问题出在GetString函数的逻辑上,同时可以优化结构体传递方式来避免不必要的拷贝:
1. 核心错误:GetString函数逻辑颠倒
你写的GetString是把传入的空数组newString复制到结构体的myString中,完全和“读取结构体字符串”的需求相反。正确逻辑应该是把结构体里的myString复制到目标数组userString里。
2. 次要优化:结构体传值的效率问题
原代码里SetString和GetString采用传值传递结构体,函数会创建结构体副本,虽然后者通过返回值覆盖原变量能工作,但存在不必要的内存拷贝。改用指针传递结构体可以直接修改原变量,效率更高。
修复后的代码
#include <stdio.h> #include <string.h> typedef struct MyStruct_struct { char myString[20]; } MyStruct; // 传递结构体指针,直接修改原变量,无需返回值 void SetString(char* userString, MyStruct* test) { strcpy(test->myString, userString); } // 修正逻辑:将结构体中的字符串复制到目标数组 void GetString(char* userString, MyStruct* test) { strcpy(userString, test->myString); } int main() { MyStruct newStruct; // 传递结构体地址 SetString("hello", &newStruct); char newString[20]; // 传递地址,获取结构体中的字符串 GetString(newString, &newStruct); printf("%s\n", newString); return 0; }
关键修改点说明
SetString改为接收结构体指针MyStruct* test,用test->myString访问成员,直接修改原结构体,无需返回值。GetString修正strcpy参数顺序,把结构体里的有效字符串复制到目标数组。- main函数调用时传递结构体地址
&newStruct,避免结构体拷贝,提升效率。
内容的提问来源于stack exchange,提问作者crmct
相关产品推荐
相关产品推荐

