请各位C程序高手看看我的这段代码,为什么运行出错?

whz_time 2002-01-23 02:42:16
#include "stdio.h"
#include "string.h"
#include "conio.h"

int CutString(char *source,char *cut[],char ch);

int main(int argc, char* argv[])
{
char *aa="abcd\tefgh\tijkl";
char *bb[3];
CutString(aa,bb,'\t');
printf("%s",bb[1]);

getch();

return 0;
}


int CutString(char *source,char *cut[],char ch)
{
int i=0,n=0,m=0;
if(source[0]==NULL)
return 0;
for(i=0;i<=(int)strlen(source);i++)
{
if(source[i]==ch||source[i]=='\0')
{
*(cut[m]+n+1)='\0';
m++;
n=0;
}
else
{
(*cut[m]+n++)=source[i];//运行到这儿出错
}
}



return ch;
}

我的目的是把一个较长的字符串以某一个字符(比方是:'\t')为断开点分成若干个字串。
...全文
210 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
whz_time 2002-01-23
  • 打赏
  • 举报
回复
谢谢各位帮忙!!

to “lhj(努力加油)”
非常感谢您的指点,我相信“良药苦口;……”,
再一次的向您表示感谢!!!

G_zcm 2002-01-23
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "string.h"
#include "conio.h"

int CutString(char *source,char *cut[],char ch);

int main(int argc, char* argv[])
{
char* aa="abcd\tefgh\tijkl";
char* bb[3];
CutString(aa,bb,'\t');
printf("%s",bb[1]);

getch();

return 0;
}


int CutString(char *source,char *cut[],char ch)
{
int i=0,n=0,m=0;
if(source[0]==NULL)
return 0;
for(int j =0;j<3;j++)//分配空间
{
cut[j] = new char[10];
}
for(i=0;i<=(int)strlen(source);i++)
{
if(source[i]==ch||source[i]=='\0')
{
cut[m][n+1]='\0';
m++;
n=0;
}
else
{
cut[m][n++]=source[i];//运行到这儿出错
}
}
return ch;
}
//这可以了,哎我也是眼高手低,搞了半天
lhj 2002-01-23
  • 打赏
  • 举报
回复
我看了你的代码,认为你对内存分配还没有搞清楚(特别实指针和指针数组的初始化),编写的代码华而不实。
char *bb[3];的意思是什么你知道吗?
char *bb0,char *bb1,char *bb2;
初始化应该
bb[0] = new char[5];
bb[1] = new char[5];
bb[2] = new char[5];

如果要的话我把你的程序改了一下

#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "conio.h"

int CutString(char *source,char *cut[],char ch);

int main(int argc, char* argv[])
{
char aa[100]="abcd\tefgh\tijkl";
char *bb[3];
CutString(aa,bb,'\t');
printf("%s",bb[1]);

getch();

return 0;
}


int CutString(char *source,char *cut[],char ch)
{
int i=0,n=0,m=0;
if(source[0]==NULL)
return 0;
int j = strlen(source);
for(i=0;i<=j;i++)
{
if(source[i]==ch||source[i]=='\0')
{
source[i]=0;
m++;
n=0;
}
else
{
if(n == 0){
cut[m]=&source[i];//运行到这儿出错
n++;
}
}
}



return ch;
}

我说话不好听,不过希望你正视自己的问题。
whz_time 2002-01-23
  • 打赏
  • 举报
回复
char *bb[3];
bb[0]="";
bb[1]="";
bb[2]="";
我已经这样作了,还是有错。真是搞不明白。
wwwsq 2002-01-23
  • 打赏
  • 举报
回复
hiahia~~~~~
你只定义了三个指针bb[0],bb[1],bb[2]却没给它们赋值,还敢跟我说是合法的值?
G_zcm 2002-01-23
  • 打赏
  • 举报
回复
to :whz_time(时间有限) 
申明成数组要好一些,用new也没问题,只是要记得释放。
你要是写两个循环就容易看得多了
notions 2002-01-23
  • 打赏
  • 举报
回复
strtok 目的是把一个较长的字符串以某一个字符(比方是:'\t')为断开点分成若干个字串。
whz_time 2002-01-23
  • 打赏
  • 举报
回复
加上char* p = (char*)((int)cut[m]+n++);合法,但运行还出错
wwwsq 2002-01-23
  • 打赏
  • 举报
回复
加上一句:
char* p = (char*)((int)cut[m]+n++);
看看p是不是合法的值
whz_time 2002-01-23
  • 打赏
  • 举报
回复
向楼上请教:
您的意思是:用new分配吗?
G_zcm 2002-01-23
  • 打赏
  • 举报
回复
char *bb[3];改成char[3][10]
G_zcm 2002-01-23
  • 打赏
  • 举报
回复
兄弟你的代码很费解。我看是因为char *bb[3];你没有为你的这些指针分配空间
whz_time 2002-01-23
  • 打赏
  • 举报
回复
*(char*)((int)cut[m]+n++)=source[i];

我该成这样也不对
whz_time 2002-01-23
  • 打赏
  • 举报
回复
*bb[5],我该成这样,也还是出错。
wwwsq 2002-01-23
  • 打赏
  • 举报
回复
sorry
(*cut[m]+n++)=source[i];
改为
*(char*)((int)cut[m]+n++)=source[i];

出错是因为类型错误。

wwwsq 2002-01-23
  • 打赏
  • 举报
回复
(*cut[m]+n++)=source[i];
改为
(char*)((int)cut[m]+n++)=source[i];

出错是因为类型错误。
whiskers 2002-01-23
  • 打赏
  • 举报
回复
*bb[3]越界了
zhuwenzheng 2002-01-23
  • 打赏
  • 举报
回复
*(cut[m]+n++)=source[i];

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧