为什么可编译,不能运行

zhongyuanceshi 2009-01-14 12:28:09

#include "stdafx.h"
#include "stdio.h"

char * strcat(char * dst, const char * src)
{
char * cp = dst;

while(*cp)
cp++;

while(*cp++ = *src++) //在这里调试不通过
;

return(dst);
}

int main(int argc, char* argv[])
{
char *dst="zhongyuan";
char *str="nihao";
char *str1=NULL;
str1=strcat(dst,str);
printf("%s\n",str1);
return 0;
}


弹出:“0xc00000005 access violation”错误信息
...全文
72 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
__ALWAYS_RUN__ 2009-01-14
  • 打赏
  • 举报
回复
up
kestre1 2009-01-14
  • 打赏
  • 举报
回复
GCC编译能过,运行段错误。
错在这:char *dst="zhongyuan";

#include "stdlib.h"
#include "stdio.h"

char * strcat(char * dst, const char * src)
{
char * cp = dst;

while(*cp)
cp++;

while(*cp++ = *src++) //在这里调试不通过
;

return(dst);
}

int main(int argc, char* argv[])
{
char dst[20]="zhongyuan";
char *str="nihao";
char *str1=NULL;
str1=strcat(dst,str);
printf("%s\n",str1);
return 0;
}

lbh2001 2009-01-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyu637 的回复:]
char *dst="zhongyuan";申明的是一个const char类型,静态变量成员。


char dst[] = "hello world".用这个方式可以。
[/Quote]

char dst[] = "hello world".用这个方式可以。----> 用作strcat目的参数的话会溢出
lbh2001 2009-01-14
  • 打赏
  • 举报
回复

#include <stdio.h>

char *mystrcat(char *dst, const char * src)
{
char *cp = dst;

while(*cp)
cp++;

while(*cp++ = *src++)
;

return dst;
}

int main(int argc, char* argv[])
{
char dst[100] = "zhongyuan"; /*dst要写入,定义成char *dst = "zhongyuan";是不可以的,这样指向常量区,不能写入*/
char *str = "nihao";
char *str1 = NULL;
str1 = mystrcat(dst, str);
printf("%s\n", str1);

return 0;
}

另外最好不要将函数名命名为strcat,避免和库函数同名
shuiyan 2009-01-14
  • 打赏
  • 举报
回复
str1的地址为0,需要用malloc分配个内存空间给str1,才可以用strcat给str1赋值。
wuyu637 2009-01-14
  • 打赏
  • 举报
回复
char *dst="zhongyuan";申明的是一个const char类型,静态变量成员。


char dst[] = "hello world".用这个方式可以。
baichuan0698 2009-01-14
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>

#define __DEBUG

#ifdef __DEBUG

void __Assert(char *expression, char *file, unsigned int line);

#define __ASSERT(f)\
if (f)\
NULL;\
else\
__Assert(#f, __FILE__, __LINE__)

void __Assert(char *expression, char *file, unsigned int line)
{
fflush(stdout);
fprintf(stderr, "assertion failed: %s, FILE %s, LINE %d", expression, file, line);
fflush(stderr);
abort();
}

#else
#define __ASSERT(f) (NULL)
#endif

char *strcat(char *dst, const char *src)
{
char *pDst = dst;

__ASSERT(dst != NULL);

while (*dst++ != '\0')
NULL;

--dst;

while ((*dst++ = *src++) != '\0')
NULL;

return pDst;
}

int main(int argc, char *argv[])
{
char str1[100] = "string 1";
char str2[100] = "+ string 2";

strcat(str1, str2);
printf("%s\n", str1);

system("PAUSE");
return 0;
}
baichuan0698 2009-01-14
  • 打赏
  • 举报
回复
晕倒。楼主写的还不是一般的烂呢,N多错误,没法说了……
全新写了一个,仅供参考。

#include <stdio.h>
#include <stdlib.h>

#define __DEBUG

#ifdef __DEBUG

void __Assert(char *expression, char *file, unsigned int line);

#define __ASSERT(f)\
if (f)\
NULL;\
else\
__Assert(#f, __FILE__, __LINE__)

void __Assert(char *expression, char *file, unsigned int line)
{
fflush(stdout);
fprintf(stderr, "assertion failed: %s, FILE %s, LINE %d", expression, file, line);
fflush(stderr);
abort();
}

#else
#define __ASSERT(f) (NULL)
#endif

char *strcat(char *dst, const char *src)
{
char *pDst = dst;

__ASSERT(dst != NULL);

while (*dst++ != '\0')
NULL;

--dst;

while ((*dst++ = *src++) != '\0')
NULL;

return pDst;
}

int main(int argc, char *argv[])
{
char str1[100] = "string 1";
char str2[100] = "+ string 2";

strcat(str1, str2);
printf("%s\n", str1);

system("PAUSE");
return 0;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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