我正在用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))

09-30 14:50
查看更多