我希望能够做到这一点:
lcd_putc("\fDeposited $" & disp_money & "\nAdd $" & temp & " more");
不幸的是,字符串文字和非文字不容易连接。我知道如何连接两个文字,以及如何连接两个非文字(与strcat),但这不是我正在寻找的。有人可以帮忙吗?
答案 0 :(得分:2)
sprintf()
和snprintf()
对此有好处。
答案 1 :(得分:1)
strcat
是这样做的方法。要获得更高级的连接,请考虑sprintf
:
sprintf (buf, "\fDeposited $%s\nAdd $%s more", disp_money, temp);
答案 2 :(得分:0)
我想您可能正在搜索sprintf
示例:
char string[50];
int file_number = 0;
sprintf( string, "file.%d", file_number );
file_number++;
output_file = fopen( string, "w" );
答案 3 :(得分:0)
char *buf = (char*)calloc(1,512);
sprintf(buf, "\fDeposited $%0.2d\nAdd $%0.2d more", disp_money, temp);
答案 4 :(得分:0)
C中的内存管理是手动的。要连接字符串,您需要提供一个包含足够字符的数组变量来保存最终结果。您可以使用malloc()在堆栈上将此缓冲区变量分配为函数的局部变量,也可以在堆上分配。
或者,如果要执行的是显示字符串,则可以避免执行连接,从而避免分配缓冲区。在这种情况下,以下内容:
lcd_putc("\fDeposited $"); lcd_putc(disp_money); lcd_putc("\nAdd $"); lcd_putc(temp); lcd_putc(" more");
是一种编写可以使用的简单方法。该方法的缺点是由lcd_putc()
引起的开销(如果有的话)。此方法的优点是不需要串联字符串。
如果做需要连接字符串,您将需要使用snprintf()
来确保不会溢出缓冲区(请参阅此网站的名称),所以不要使用sprintf()
。
只是为了向您展示未来需要连接字符串的方式:
#define STR_DEPOSITED "\fDeposited $"
#define STR_ADD "\nAdd $"
#define STR_MORE " more"
int total_length = strlen(STR_DEPOSITED) + strlen(STR_ADD) + strlen(STR_MORE) + strlen(disp_money) + strlen(temp) + 1;
char * buffer = malloc(total_length + sizeof(char));
snprintf(buffer, "%s%s%s%s%s", STR_DEPOSITED, disp_money, STR_ADD, temp, STR_MORE);
您也可以使用strncpy(), strncat()
完成同样的事情。作为旁注,还要考虑对变量使用strnlen()
,以便不读取超出非终止缓冲区的末尾。
答案 5 :(得分:0)
字符串不是C中的第一类对象,因此没有语言支持以您描述的方式进行连接。但是,您可以调用许多不同的函数来为您提供所需的输出。
可能最容易使用的是sprintf
。请注意,必须提供足够大的输出缓冲区来保存结果字符串,并且如果您有权访问snprintf
或sprintf_s
,则sprintf不会执行任何边界检查。
char output[SUFFICIENTLY_LARGE_VALUE];
sprintf (output, "\fDeposited $%s\nAdd $%s more", disp_money, temp);
sprintf字符串中的 %s
表示将插入字符串参数的位置,第一个%是第一个参数(disp_money),第二个%是第二个参数(temp)。