C - 编译器不允许我编辑传递的字符串



我环顾四周,在其他问题中找不到解决问题的方法。出于某种原因,当我运行程序时,我遇到了分段错误,这似乎是因为我正在更改给定字符串。我尝试将指针传递给字符指针并进行编辑,但无济于事。

我得到什么:

之前:胡安巴勃罗 分段故障(核心转储)

我的代码:

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

相关内容

  • 没有找到相关文章

最新更新