如何在C中修复自定义insertString函数

时间:2014-03-21 07:33:26

标签: c string function

#include <stdio.h>

int strLength(char *strP) 
{
    int i = 0;
    while(*(strP + i) != '\0') i++;
    return i; 
} 
// insert the second string into the first starting 
// at the specified index 
// if failure, do nothing
void insertString(char *str1P, char *str2P, int index) 
{
    int i = 0,
    str1Length = strLength(str1P), str2Length = strLength(str2P);

      *(str1P + str1Length + str2Length) = '\0';    
    while(i < (str1Length - index))
    {
        *(str1P + index + str2Length + i) = *(str1P + index + i);
          *(str1P + index + i) = *(str2P + i);
         i++;
    }
}

int main() 
{
    //insert
    char str8[20] = "the wrong son";

    insertString(str8, "per", 14 );
    printf("\nAfter insert1  = %s\n", str8);

    insertString(str8, "per", 10 );
    printf("After insert2  = %s\n", str8);

    insertString(str8, "You are ", 0);
    printf("After insert3  = %s\n\n", str8);
    return 0;
}

我正在学习我的算法和程序设计类的C中的指针和字符串,最近我们将其作为一项任务的一部分。我完成了其他一切,但我仍然遇到insertString函数的问题。来自main的前两个调用产生了理想的结果,但第三个似乎打破了。有人可以帮我找到导致这种情况的原因吗?

1 个答案:

答案 0 :(得分:0)

第三次调用失败,因为str8的大小为20.第三次字符串插入需要的内存多于分配给str8 [20]的内存。
因此,分配更多内存以支持第三个字符串插入,或者您可以使用dynamic allocation字符串变量来获得一般解决方案。