在c中将子字符串插入另一个字符串

时间:2016-04-14 17:16:30

标签: c arrays string null-character

我刚开始学习c 。我正在做练习,问题如下。

编写一个名为insertString的函数,将一个字符串插入另一个字符串。函数的参数应该包括源字符串,要插入的字符串以及源字符串中字符串所在的位置。插入。因此,使用最初定义的文本insertString (text, "per", 10);的调用"the wrong son"会导致字符串"per"插入到文本中,从text[10]开始。因此,字符串{{1函数返回后存储在文本数组中。

"the wrong person"

我已经做到了这一点,它也在发挥作用。但我收到一条消息#include<stdio.h> int insertString(char[],char[],int); int stringLength(char[]); int main() { char text[]="the wrong son"; int result=insertString(text,"per",10); if(result!=-1) printf("string 1 is : %s \n",text); else printf("Not possible\n"); return 0; } int insertString(char a[],char b[],int pos) { int i=0,j=0; int lengthA=stringLength(a); int lengthB=stringLength(b); if(pos>lengthA) return -1; for(i=lengthA;i>=pos;i--) a[i+lengthB]=a[i]; for ( i = 0; i < lengthB; ++i ) a[i + pos] = b[i]; return 1; } int stringLength(char x[]) { int length=0; while(x[length]!='\0') length++; return length; } 。当我看着它时,我知道这是一个错误,因为我写的是我不拥有的记忆。因为我使用了可变长度的字符数组,无论abort trap : 6在哪里,都表示数组的结束,我试图通过插入字符串来扩展它,这是我的理解。我到目前为止对吗?

我也在移动null character。我不知道这是对还是错。

那么有办法解决这个错误吗?此外,我还不知道指针,它们在教科书的下一章

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

可变长度数组是very specific C construct,它与教科书所称的“可变长度数组”无关。如果我是你,如果它说1 + 1 = 2,我就不相信这本教科书。真是太棒了。

以空字符结尾的字符数组被几乎所有人都称为 string

char text[]="the wrong son";

您的教科书让您相信text会根据您的需要保留多个字符。唉,在C中没有这样的东西。实际上text将保留与其初始值设定项一样多的字符,加上1为空终止符,因此您不能在其中插入任何内容。

为了使您的程序正常工作,您需要为结果字符串包含的text显式分配多个字符。

因为“错误的儿子”(包括终结者)中有14个字符,“per”中有3个字符(不包括终结符),所以总共需要17个字符:

char text[17]="the wrong son";

您还可以检查您的计算:

int result=insertString(text, "per", 10, sizeof(text));
...
int insertString(char a[], char b[], int pos, int capacity)
{
   ...
   if (lengthA + lengthB + 1 < capacity) 
     return -1;
   ...