我正在尝试从字符串中删除给定数量的字符,并且必须从某个位置删除它。例如。我有一个字符串" helloStackOverFlow"和给定的数字:位置i = 5
,要删除的字符数n = 9
。所以我们得到了#34; helloFlow"。
当我执行程序时,出现错误Unhandled exception at 0x00EC166F in skuska trening.exe: 0xC0000005: Access violation writing location 0x00EC58D7.
这是我的代码,我认为字符串分配有问题,它想写一些不存在的地方,但我不确定......
void remove(char s[], int n, int i){
int j,dlzka=0;
dlzka = strlen(s);
for(j=i; j<dlzka; j++){
do{
s[j] = s[j+n];
}while( (j+n)==dlzka);
}
printf("%s\n", s);
}
int main()
{
char s[100];
int n, i;
remove("helloStackOverFlow", 9, 5);
system("pause");
return 0;
}
答案 0 :(得分:0)
您的代码中有几处错误
您正在尝试更改
中的字符串文字remove("helloStackOverFlow", 9, 5);
您的函数名称与标准函数的名称相同。
您的remove()
函数算法错误,while循环永远不会结束,因为j
或n
在循环内都没有变化。
此代码应该可以使用
void removeChunk(char s[], unsigned int n, unsigned int i)
{
unsigned int k;
unsigned int length;
if ((s == NULL) || (i == 0))
return;
length = strlen(s);
if (i + n > length)
n = length - i;
for (k = 0 ; (k < n) && (s[k + i - 1] != '\0') ; k++)
s[k + i] = s[k + i + n];
}
int main()
{
char s[100] = "helloStackOverFlow";
removeChunk(s, 9, 5);
printf("%s\n", s);
return 0;
}