我环顾四周,在其他问题中找不到解决问题的方法。出于某种原因,当我运行程序时,我遇到了分段错误,这似乎是因为我正在更改给定字符串。我尝试将指针传递给字符指针并进行编辑,但无济于事。
我得到什么:
之前:胡安巴勃罗 分段故障(核心转储)
我的代码:
void rm_char(char* word, int pos){
printf("before: %sn", word);
int len = strlen(word);
int i;
i = pos;
while(word[i+1] != ' '){
word[i] = word[i+1];
i++;
}
word[i] = ' ';
printf("after: %sn", word);
}
int main(void){
rm_char("juanpablo", 2);
}
来自 C 标准(6.4.5 字符串文字)
7 未指定这些数组是否不同,前提是它们的 元素具有适当的值。如果程序尝试 修改这样的数组,行为是未定义的。
要转义错误,您可以调用该函数,例如
char s[] = "juanpablo";
rm_char( s, 2 );
考虑到最好对第二个参数使用类型size_t
而不是类型int
,并且声明的变量len
int len = strlen(word);
未在函数中使用。
该函数应声明为
char * rm_char(char* word, size_t pos);
这是一个演示程序
#include <stdio.h>
#include <string.h>
char * rm_char(char *word, size_t pos)
{
size_t n = strlen( word );
if ( pos < n )
{
//memmove( word + pos, word + pos + 1, n - pos );
do
{
word[pos] = word[pos+1];
} while ( word[pos++] );
}
return word;
}
int main(void)
{
char word[] = "juanpablo";
puts( word );
puts( rm_char( word, 2 ) );
return 0;
}
它的输出是
juanpablo
junpablo