You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:10:09