运行程序时出错 - C

时间:2013-04-09 15:39:51

标签: c function pointers

运行程序的错误在哪里? 我知道在两个函数中循环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;
}

1 个答案:

答案 0 :(得分:3)

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