Я только начал учиться c. я делаю упражнение, и вопрос заключается в следующем.Вставка подстроки в другую строку в c
Напишите функцию с именем insertString
, чтобы вставить одну строку символов в другую строку. Аргументы функции должны состоять из исходной строки, строки для вставки и положения в исходной строке, где должна быть вставлена строка , Таким образом, вызов insertString (text, "per", 10);
с текстом, как первоначально определено "the wrong son"
, приводит к тому, что строка символов "per"
вставляется внутри текста, начиная с text[10]
. Поэтому строка символов "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
, указывает конец массива, и я пытаюсь расширить его, вставив строку, это мое понимание. До сих пор я прав?
Я также перемещаю null character
. я не знаю, правильно это или нет.
так есть способ обойти эту ошибку? Кроме того, я еще не знаю указателей, и они находятся в следующей главе учебника.
Любая помощь в этом была бы очень признательна.
Вы не используете «массивы символов переменной длины». Вы либо должны заранее выделить достаточно места для вашего конечного результата, либо вам нужно использовать выделенную память и, возможно, перераспределить ее. Посмотрите ссылки на 'malloc()' и 'realloc()'; – Logicrat
«Я использовал массивы символов переменной длины» где? 'char a []' в заголовке функции не является массивом переменной длины. –
о, не так ли? @Logicrat. в учебнике указано, что массивы символов, которые заканчиваются символом «нуль», представляют собой массивы символов переменной длины – yash