我正在用C编写一个程序,下面的函数接受三个参数,并将用另一个字符替换字符串中的一个字符。好吧,它大部分工作得很好,但是当我试图执行这部分代码时,我得到了一个错误:str[pos]=ch;。错误显示“访问冲突写入位置0x0133585B”
void kstrput(char *str, size_t pos, char ch)
{
if(pos > strlen(str))
{
abort();
}
str[pos] = ch;
}
主体部分:
char *kstr = "hello";
int pos = 3;
char s = '\0';
printf("\n Enter a character ");
scanf("%c", &s);
kstrput(kstr,pos,s); // calling the kstrput function
printf("\n After kstrput: %s",kstr); //printing the struct to check value of the string
最佳答案
"hello"
是常量(不可修改),可能(也可能)存储在只读存储器中。
正确的指向方法是使用const char *
类型的指针。
在这种情况下,您需要定义char
数组并将其初始化为“hello”:
char kstr[] = "hello";
还要注意,在
kstrput
中,如果pos
等于strlen(str)
,则它将覆盖表示字符串结束的'\0'
。更好的使用:
if(pos >= strlen(str))