strcat将第二个字符串粘贴到第一个字符串的开头
我使用strcat将第二个字符串粘贴到第一个字符串的开头,c,string,strcat,C,String,Strcat,我使用strcat()连接两个字符串,如: #include <string.h> #include <stdio.h> int main(int argc, char *args[]) { char *str1; // "456" char *str2; // "123" strcat(str1,str2); printf("%s",str1); } 但我需要第一个字符
strcat()
连接两个字符串,如:
#include <string.h>
#include <stdio.h>
int main(int argc, char *args[])
{
char *str1; // "456"
char *str2; // "123"
strcat(str1,str2);
printf("%s",str1);
}
但我需要第一个字符串开头的第二个字符串,如:
123456
我怎么做?你需要使用
strcpy
而不是strcat做strcat(str2,str1)代码>,切换参数。但您将在str2
中获得结果字符串,如果您确实想在程序中进一步使用str1
,可以将其设置为str1
但是,您需要适当注意str2
中的可用内存空间
如果要更改str1,请执行此操作
char *tmp = strdup(str1);
strcpy(str1, str2); //Put str2 or anyother string that you want at the begining
strcat(str1, tmp); //concatenate previous str1
...
free(tmp); //free the memory
来自man strcat
的逐字记录:
char*strcat(char*dest,const char*src)
描述
函数的作用是:将src字符串追加到dest字符串,覆盖dest末尾的空字节('\0'),然后添加一个终止的空字节。字符串不能重叠,dest字符串必须有足够的长度
结果的空间
作为程序员,您需要确保指针char*dest
引用了足够的有效内存来保存将从char*src
指向的位置复制的附加char
s
要成功地在str1
前面加上str2
前缀,请声明如下:
char str2[3 + 1] = "123"; // three for "123" plus 1 for the terminating 0
char str1[2 + 3 + 1] = "46"; // 2 for "46" plus 3 for "123" plus 1 for the terminating zero
要实际连接两个char
数组,请执行以下操作:
strcat(str1, str2);
尝试将其用于静态大小的阵列,在我的项目中对我有用
void strbeg(char* strReceive, char* strInsert)
{
int strInsertLength = strlen(strInsert);
int strReceiveLength = strlen(strReceive);
for(int i = strReceiveLength; i >= 0; i--)
{
strReceive[i + strInsertLength] = strReceive[i];
}
for(int i = 0; i < strInsertLength; i++)
{
strReceive[i] = strInsert[i];
}
}
void strbeg(char*strReceive,char*strInsert)
{
int strInsertLength=strlen(strInsert);
int strReceiveLength=strlen(strReceive);
对于(int i=strReceiveLength;i>=0;i--)
{
strReceive[i+strInsertLength]=strReceive[i];
}
for(int i=0;i
您的示例不清楚。什么是字符*str1;//“456”
打算怎么办?它不会生成您显示的输出,但会遇到未定义的行为,因为没有为任何字符分配内存,但是str1
和str2
随机指向某个地方。str1是一个长字符串,我需要在开头添加另一个字符串。我需要在开头添加“”(空白)str1@Refael,检查更新的答案。您可以将其更改为附加尽可能多的字符串。噢,这意味着引用了足够的内存!这在你的例子中并不清楚strcat()
只是一个伪智能复制函数。它肯定不是“内存区域连接器”!它不会将调用strdup()
分配的内存附加到str1
引用的内存中!只有realloc()
能够扩展已分配内存的区域。@alk,这假设str1
有足够的内存。
void strbeg(char* strReceive, char* strInsert)
{
int strInsertLength = strlen(strInsert);
int strReceiveLength = strlen(strReceive);
for(int i = strReceiveLength; i >= 0; i--)
{
strReceive[i + strInsertLength] = strReceive[i];
}
for(int i = 0; i < strInsertLength; i++)
{
strReceive[i] = strInsert[i];
}
}