是否有一种简单的方法可以将字符串非文字与文字连接起来?

时间:2010-02-12 00:39:53

标签: c

我希望能够做到这一点:

lcd_putc("\fDeposited $" & disp_money & "\nAdd $" & temp & " more");

不幸的是,字符串文字和非文字不容易连接。我知道如何连接两个文字,以及如何连接两个非文字(与strcat),但这不是我正在寻找的。有人可以帮忙吗?

6 个答案:

答案 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。请注意,必须提供足够大的输出缓冲区来保存结果字符串,并且如果您有权访问snprintfsprintf_s,则sprintf不会执行任何边界检查。

char output[SUFFICIENTLY_LARGE_VALUE];
sprintf (output, "\fDeposited $%s\nAdd $%s more", disp_money, temp);
sprintf字符串中的

%s表示将插入字符串参数的位置,第一个%是第一个参数(disp_money),第二个%是第二个参数(temp)。