这段代码哪出有关问题了?编译完执行不了

这段代码哪出问题了?编译完执行不了
#include <stdio.h>
#include <string.h>
#include<stdlib.h>

void deldigit(char *s)
{
char *t = (char *)malloc( strlen(s)+1); /*申请串空间*/
int i, k = 0;
if (!t) 
return;

for(i = 0; i < strlen(s); i++)
{
if ( !(*(s+i)>='0' && *(s+i)<='9') ) 
{
t[k++] = s[i];
}
}
t[k++]= '\0'; /*设置串结束标志*/

strcpy(s,t);

printf(s);

free(t);
}

int main()

{

char *str="abcde123fgh8";
deldigit(str);

return 0;

}
这段代码哪出有关问题了?编译完执行不了
------解决方案--------------------

//问题出在这里
char *str="abcde123fgh8";//字串是存在静态数据存储区的,
//不能修改,要改成如下形式
char str[20] ="abcde123fgh8";

deldigit(str);

------解决方案--------------------
你定义的str是const类型的,你的初始化不正确,因为const char是不允许被修改的。
 
所以异常抛出 是在strcyp(s,t) 这个语句抛出的异常。 

你可以改成

char *str="abcde123fgh8";
char test[1024];
memset(test, 0, sizeof(test));
strcpy(test, str);
deldigit(test);

------解决方案--------------------
#pragma comment(linker,"/SECTION:.rdata,RW")
//加这句可以让常量区可写,后果自负!