这段代码哪出有关问题了?编译完执行不了
这段代码哪出问题了?编译完执行不了
#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;
}
------解决方案--------------------
------解决方案--------------------
你定义的str是const类型的,你的初始化不正确,因为const char是不允许被修改的。
所以异常抛出 是在strcyp(s,t) 这个语句抛出的异常。
你可以改成
------解决方案--------------------
#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")
//加这句可以让常量区可写,后果自负!