2013-04-09 114 views
-5

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

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

该崩溃是: 在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; 
} 
+0

您是否收到错误讯息?怎么了?你期望发生什么? – EClaesson 2013-04-09 15:42:11

+0

什么样的错误?它是一个崩溃?或意外的回报?或垃圾打印? ... – MOHAMED 2013-04-09 15:45:49

+0

我不知道修改字符串文字的选择有哪些问题,但这显然是一个重复的问题。 – 2013-04-09 15:46:23

回答

3

两个what1()what2()正在修改的文字传递的字符串,这是不确定的行为,因为这样的字符串可以存储在只读存储器。

+0

我认为该字符串不是只读内存。为什么字符串是只读存储器,以及如何更改写入内存? – Michael 2013-04-09 16:10:55