-5

运行程序的错误在哪里?我知道这两个函数中循环FOR的行有问题。

我用调试器运行,我不知道为什么会出现错误。

崩溃是:program2.exe 中 0x00E214E5 处的未处理异常:0xC0000005:访问冲突写入位置 0x00E25865。

然后程序停止。

我的代码:

#include <stdio.h>

char *what1 (char s[], char t[], int n);
int what2 (char str[], char c);

int main ()
{

    printf("%s\n", what1("hello", "world", 2));
    printf("%d\n", what2 ("fkbf", 'o'));

    return 0;
}


char *what1 (char s[], char t[], int n)
{
    char *p=s;
    while (*s++);
    for (--s; n-- && (*s=*t); s++, t++);
    *s='\0';
    return p;
}

int what2 (char str[], char c)
{
    char *ptr;
    for (ptr=str; *ptr;)
        if ((*str=*ptr++)!=c)
            str++;
    *str ='\0';
    return ptr-str;
}
4

1 回答 1

3

两者what1()what2()都在修改作为文字传递的字符串,这是未定义的行为,因为此类字符串可以存储在只读内存中。

于 2013-04-09T15:46:34.907 回答