字符串连接细节

时间:2015-01-20 16:52:31

标签: c string concatenation stdout

两个字符串之间是否有连接的函数/公共方法,而string2出现在指定位置的string1中?

如果问题不够明确,请看一下这个例子:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char str[100] = "I love Gyros";

    concatenate(&str[2], "dont ");

    printf(str);

    return 0;
}

输出:

I dont love Gyros

2 个答案:

答案 0 :(得分:4)

  

两个字符串之间是否有连接的函数/公共方法,而string2出现在指定位置的string1中?

不,没有。

您可以使用多种方法完成您的尝试。一种方法是使用sprintf

char str[100];
sprintf(str,"I %s love Gyros", "don't");

另一种方法是将str的内容向右移动所需的数量,然后设置中间元素的值。

#include <stdio.h>
#include <string.h>

void insertInString(char* str1, size_t pos, char const* str2)
{
   size_t len1 = strlen(str1);
   size_t len2 = strlen(str2);
   size_t i = 0;

   // Shift the contents of str1
   for ( i = len1; i >= pos; --i )
   {
      str1[i+len2] = str1[i];
   }

   // Now place the contents of str2 starting from pos
   for ( i = 0; i < len2; ++i )
   {
      str1[i+pos] = str2[i];
   }
}

int main()
{
    char str[100] = "I love Gyros";
    insertInString(str, 2, "don't ");
    printf("%s\n", str);
    return 0;
}

答案 1 :(得分:0)

没有任何功能可以做你想要的。 而不是让函数连接哪个对它起作用是非常重要的,有函数insert_phrase与原型... char * insert_phrase(char * string,char * phrase,size_t after_word); 你的例子现在会读......

Insert_phrase(str,&#34; don&#39; t&#34;,1);

任何实际使用的连接函数都需要在插入don之前对两个参数进行词法分析。