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

如何将加法运算表达式存入结构体的char类型字段?

问题与解决方案

问题描述

定义了如下结构体:

typedef struct STRUCT{
    char calculation[30];
}STRUCT;

同时编写了如下函数:

int add_number(int num1, STRUCT *pointer) {
   int integer;
   int sum;
   printf("\nGive an integer to be added: ");
   scanf("%d", &integer);
   sum = num1 + integer;
   printf("%d+%d=%d\n", num1, integer, sum);
   scanf("%s", pointer->calculation);   // 此处希望将%d+%d=%d的内容存入pointer->calculation 
   num1 = sum;
   return num1;
}

需求是将结合num1、integer、sum实际值的格式化字符串(例如num1=1、integer=2时得到"1+2=3")存入pointer->calculation字段。

解决方案

直接用snprintf函数替换掉原代码中的scanf语句即可,snprintf可以将格式化后的内容直接写入指定字符数组:

修改后的函数代码:

int add_number(int num1, STRUCT *pointer) {
   int integer;
   int sum;
   printf("\nGive an integer to be added: ");
   scanf("%d", &integer);
   sum = num1 + integer;
   printf("%d+%d=%d\n", num1, integer, sum);
   // 将格式化内容写入calculation数组
   snprintf(pointer->calculation, sizeof(pointer->calculation), "%d+%d=%d", num1, integer, sum);
   num1 = sum;
   return num1;
}

关键说明

  • snprintf的第一个参数是目标字符数组,第二个参数是数组的总长度(用来避免缓冲区溢出),第三个参数是格式化模板,后续参数对应模板中的占位符。
  • 如果需要把换行符也存入数组,可以将格式化模板改为"%d+%d=%d\n"。
  • 使用sizeof(pointer->calculation)能准确获取数组的容量,确保写入内容不会越界。

内容的提问来源于stack exchange,提问作者rainer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:01:25