打印

内存分配问题

[复制链接]
1189|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dfsa|  楼主 | 2014-2-28 18:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
tempArr = (char *)malloc(len2+1);
问题在这 下一行 为什么sizeof(tempArr) 这个值总等于4呢?
memset(tempArr,0x00,sizeof(tempArr));
源代码如下
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int SerchStr(char *longStr,char *shortStr);  //在长字符串中查找短字符串的位置函数声明

void main(int argc, char* argv[])
{
    //printf("Hello World!\n");
    //return 0;
    char str1[31] = "abcdefghigklmnopqrstuvwxyz1234";
    char str2[7] = "abcdef";
    int pos = SerchStr(str1,str2);
    printf("%d",pos);
}
//在长字符串中查找短字符串的位置函数实现
int SerchStr(char *longStr,char *shortStr)  
{
    int len1 = strlen((const char*)longStr);
    int len2 = strlen((const char*)shortStr);
    char *tempArr = NULL;
    if(len1<len2 || len1 == 0 || len2 == 0)
        return -1;
    else
    {
      /* 动态分配内存,数组中要存char字符串,要存结束符“\0”,所以多分配一个字节的内存空间 */
      //tempArr = (char *)malloc((len2+1+1)*(sizeof(char)));
      tempArr = (char *)malloc(len2+1);
      for(int i=0;i<=len1-len2;i++)
      {
         //??   问题在这 下一行 为什么sizeof(tempArr) 这个值总等于4呢?
         memset(tempArr,0x00,sizeof(tempArr));  
         memcpy(tempArr,longStr+i,len2);
         if(strcmp(tempArr,shortStr) == 0)
         {
             return i+1;
         }
      }
      return -1;
    }
}

相关帖子

沙发
火箭球迷| | 2014-2-28 18:36 | 只看该作者
tempArr是一个指针,所以的都是4
sizeof(*tempArr)就不是了

使用特权

评论回复
板凳
pkat| | 2014-2-28 18:51 | 只看该作者
32位机上指针占4个字节。
tempArr是一个指针,所以的都是4

使用特权

评论回复
地板
无冕之王| | 2014-2-28 18:58 | 只看该作者
sizeof(tempArr) tmpArr是一个指针,其占用内存大小取决于你编译的是32位还是64位的程序。如果是32位,那就是4字节,结果就是4.   如果是64位程序,那就是8

使用特权

评论回复
5
txcy| | 2014-2-28 19:09 | 只看该作者
pkat 发表于 2014-2-28 18:51
32位机上指针占4个字节。
tempArr是一个指针,所以的都是4

分析的很有道理

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

282

主题

2404

帖子

2

粉丝