鱼C论坛

 找回密码
 立即注册
查看: 5478|回复: 12

求高手指教 动态数组越界问题 在线等

[复制链接]
发表于 2013-8-27 22:39:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Ghost_Scholar 于 2013-8-28 11:20 编辑

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <windows.h>
  4. void StrCat(char * lP,char * lQ);
  5. int main(void)
  6. {
  7.         char * lP;
  8.         char b[100];

  9.         lP=(char *)malloc(sizeof(char)*10);
  10.         gets_s(lP,10);
  11.         scanf_s("%s",b,100);
  12.         StrCat(lP,b);

  13.         printf("%s",  lP);
  14.         free(lP);
  15.         system("pause");
  16.         return 0;
  17. }

  18. void StrCat(char * lP ,char * lQ)
  19. {
  20.         int i;
  21.         for(i=0;*lP != '\0'; i++)
  22.         {
  23.                 lP++;
  24.         }
  25.         for (; *lQ != '\0'; lP++,lQ++)
  26.         {
  27.                 *lP = *lQ;
  28.         }
  29.         *lP='\0';
  30. }
复制代码
求高手解决过界问题啊 在线等!~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-27 22:49:30 | 显示全部楼层
为什么没人啊  我知道问题太简单了 能不能指点下 你们一句话就能帮我很大的忙啊!~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-27 23:02:30 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-27 23:04:36 | 显示全部楼层
牡丹花下死做鬼 发表于 2013-8-27 23:02
→_→ 可是我不会啊

。。。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-27 23:23:54 | 显示全部楼层
使用动态数组自增长
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-27 23:36:18 | 显示全部楼层
你的StrCat函数中把1P的值修改了,已经指向目标数组的末尾了,而且你的StrCat连返回语句都米有。。所以得到结果,StrCat这样些就ok了..
char * StrCat(char * lP ,char * lQ)
{
        int i;
        char *tmp = lP;
        for(i=0;*lP != '\0'; i++)
        {
                lP++;
        }
        for (; *lQ != '\0'; lP++,lQ++)
        {
                *lP = *lQ;
        }
        *lP='\0';

        return tmp;
}

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-27 23:42:14 | 显示全部楼层
本帖最后由 Ghost_Scholar 于 2013-8-27 23:43 编辑
__star__ 发表于 2013-8-27 23:36
你的StrCat函数中把1P的值修改了,已经指向目标数组的末尾了,而且你的StrCat连返回语句都米有。。所以得到 ...


呃  老大 我用的指针啊  如果LP+LQ 不超过LP的界限的话是能正常输出的  超过了也能输出但是程序也死了!~~
你说那返回值我试过没用 只是返回的还是LP的数组首地址 他的长度还是没有改变 照样越界程序死掉~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-28 09:29:09 | 显示全部楼层
Ghost_Scholar 发表于 2013-8-27 23:42
呃  老大 我用的指针啊  如果LP+LQ 不超过LP的界限的话是能正常输出的  超过了也能输出但是程序也死了 ...

老兄,你一开在main函数里就把1P和b数组的大小给指定了,,而且一个是10一个是100。。你不觉得你搞反了么。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-28 11:05:24 | 显示全部楼层
为什么运行出来是一堆16进制代码??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-28 11:10:11 | 显示全部楼层
__star__ 发表于 2013-8-28 09:29
老兄,你一开在main函数里就把1P和b数组的大小给指定了,,而且一个是10一个是100。。你不觉得你搞反了么 ...

......  你没出来我是有意的吗?  就是想解决动态数组越界问题啊~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-28 11:18:14 | 显示全部楼层
pcfate 发表于 2013-8-28 11:05
为什么运行出来是一堆16进制代码??

你没发现bug吗?  函数体内没有返回值 但是函数定义的是有返回值的  还有 主函数里面的输出 既然函数体内没有返回值 那printf(“%d”,strcat(lp,b));是输出的不确定的东西
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-28 11:28:53 | 显示全部楼层
Ghost_Scholar 发表于 2013-8-28 11:18
你没发现bug吗?  函数体内没有返回值 但是函数定义的是有返回值的  还有 主函数里面的输出 既然函数体内 ...

刚才百度了下。。gets_s  和 scanf_s  都是VS编译环境下支持的啊。。。我用C-free的啊 根本运行不了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-28 11:47:49 | 显示全部楼层
Ghost_Scholar 发表于 2013-8-28 11:10
......  你没出来我是有意的吗?  就是想解决动态数组越界问题啊~

额,要么分配大点足够空间,要么用柔性数组..用C++的容器也行?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-5 20:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表