我试图通过用新字符串(toInsert)替换(原始)字符串中的子字符串来插入字符串。 start参数是我要替换的子字符串的起始位置。注意:这是较大程序的一部分,但我只是想让这个功能起作用。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ROW 5
#define COLUMN 81
void insertString(char original[], int start, int length, char toInsert[]){
char buffer[COLUMN];
int i = 0;
for (i=0; i<strlen(original); ++i){
if (i>=start){
buffer[i] = toInsert[i];
}
else{
buffer[i] = original[i];
}
}
buffer[strlen(buffer)-1] = '\0';
printf("%s\n", buffer);
return;
}
int main()
{
char rep[COLUMN] = "very";
char sub[COLUMN] = "are";
char buf[ROW][COLUMN] = {
{"How are you doing"}
};
int len = strlen(sub);
int start = 4;
insertString(buf[0], start, len, rep);
return 0;
}
问题是它只打印&#34;如何&#34;。
我想要打印&#34;你做得多好&#34;
另外,我尝试过使用strcpy,但是只是提供错误/警告(与指针有关,我不想处理指针,因为我还没有了解它们。)
答案 0 :(得分:1)
你的功能没有多大意义,因为它既不会扩大或缩小原始字符串,但必须这样做。
此外,由于此if语句,它具有未定义的行为,因为当i
等于或大于start
时,您可以使用索引{{toInsert
访问字符串i
以外的内存。 1}}。
if (i>=start){
buffer[i] = toInsert[i];
}
使用标准C函数编写函数更简单。
你在这里
#include <stdio.h>
#include <string.h>
char * replaceString( char *s1, size_t pos, size_t n, const char *s2 )
{
size_t n1 = strlen( s1 );
if ( pos < n1 )
{
size_t n2 = strlen( s2 );
if ( n != n2 )
{
memmove( s1 + pos + n2, s1 + pos + n, n1 - pos - n + 1 );
}
memcpy( s1 + pos, s2, n2 );
}
return s1;
}
int main(void)
{
{
char s1[100] = "ab1111cd";
const char *s2 = "22";
puts( replaceString( s1, 2, 4 , s2 ) );
}
{
char s1[100] = "ab11cd";
const char *s2 = "2222";
puts( replaceString( s1, 2, 2 , s2 ) );
}
{
char s1[100] = "ab11cd";
const char *s2 = "22";
puts( replaceString( s1, 2, 2 , s2 ) );
}
return 0;
}
程序输出
ab22cd
ab2222cd
ab22cd
如果要插入此代码块
{
char s1[100] = "How are you doing";
const char *s2 = "very";
puts( replaceString( s1, 4, 3 , s2 ) );
}
在示范程序中,您将获得输出
How very you doing