如何将加法运算表达式存入结构体的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
相关产品推荐
相关产品推荐

