有没有一个函数可以在不需要在C语言中创建两个不同的char数组的情况下追加到一个字符串的前面?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有一个函数可以在不需要在C语言中创建两个不同的char数组的情况下追加到一个字符串的前面?相关的知识,希望对你有一定的参考价值。
在C语言中,将字符串的尾部连接起来很容易。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]){
char str[15] = "new ";
printf("old str = %s\n", str);
strcat(str, "word");
printf("new str = %s\n", str);
return 0;
}
输出
old str = new
new str = new word
但是当我在一个数组的前面进行追加时,我会这样做:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]){
char str[15] = "word";
char newStr[15] = "new ";
printf("str = %s\n", str);
strcat(newStr, str);
printf("new str = %s\n", newStr);
return 0;
}
输出
str = word
new str = new word
但是有没有一个函数可以让我在一行中追加到一个字符串的前面?更清楚的说,有没有一种方法可以在不需要创建两个不同的函数的情况下,将其追加到一个字符串的前面?char
数组?我只是觉得如果能这样做的话,我的代码看起来会干净很多。
半sudo代码的append函数
str = "word";
append(str, "new ");
当打印出来时,会有如下的输出。
str = word
new str = new word
这样的东西会让我的生活变得更轻松 因为我最近一直在处理很多文件输入的问题
谢谢
你可以自己制作。
#include <stdio.h>
#include <string.h>
char *strprepend(char str[], char const *prefix)
{
size_t slen = strlen(str);
size_t plen = strlen(prefix);
memmove(str+plen,str,slen+1);
memcpy(str,prefix,plen);
return str;
}
int main(int argc, char *argv[]){
char str[15] = "word";
printf("str = '%s'\n", str);
printf("new str= '%s'\n", strprepend(str,"new "));
return 0;
}
/*
Output:
str = 'word'
new str= 'new word'
*/
如果你不想复制 strcat
的不安全性,您也可以添加一个缓冲区大小检查。
不,也许你应该看看 FreeBSD 内核的内部结构,看看他们是如何解决 TCPIP 堆栈的问题的。 由于他们需要有效地 (这意味着如果没有必要的话,不会进行字符串复制)构建数据包,并且他们必须在数据包的前面添加数据,因此他们分配了一些结构 (叫做 mbuf
的,使用小的、预先分配的和有几种容量的)来建立完整的数据包。 它们也不是一开始就开始填充数据,而是在前面预留一些空间,以便以后知道要添加的数据量时再添加。 在linux中也是这样做的,所以这也是一个很好的起点。
顺便说一下,你最好解释一下你的具体问题......这样就可以评估你如何更好更有效地建立你的东西。 认为重新分配和复制数据是通常的坏习惯,它导致了低性能和低效率的代码。 最好的方法是考虑如何在开发东西的时候不需要移动大块的内存。
以上是关于有没有一个函数可以在不需要在C语言中创建两个不同的char数组的情况下追加到一个字符串的前面?的主要内容,如果未能解决你的问题,请参考以下文章
c语言问题,在源文件下编写了两个cpp文件,只能运行其中的一个,另外一个怎么运行呢?