字符串内存泄漏的小实验

       今天看到字符串的知识点,资料上在计算字符串长度和所占内存时,提到了所占内存比字符串长度要多一个字节,因为字符串末尾有一个不显示的 ‘\0’ 所以字符串长度比所占内存要少一个字节。

       我就想,‘\0’ 是做什么用的,原来 ‘\0’ 是为了以 “%s” 输出字符串时终止输出用的。如果我把字符串以单个字符输出的形式输出呢?

 

    int _tmain(int argc, _TCHAR* argv[])
    {

          char s[] = { "hahahahah" };             //定义一个字符数组s[],把“hahahaha”赋值给s[]

          for (int i = 0; i < 10; ++i)                 //循环输出字符串的单个字符
          {
            printf("%c", s[i]);
          }
    
     return 0;

    }



结果会把 ‘\0’ 以空格的形式输出。

既然可以吧 ‘\0’输出...如果我同时定义两个字符数组,保存两个不同的字符串,取到一个字符数组的地址是不是可以把另一个数组中的字符挨个输出出来?疑问


因为栈内存中变量是向低地址扩展的,意思是先定义的变量地址比后定义的变量要大,所以我应该输出后来定义的数组


int _tmain(int argc, _TCHAR* argv[])
{
    char a[] = {"hello world!"};         //定义一个字符数组a[],把“Hello World!”赋值给a[]
    char s[] = { "hahahahah" };             //定义一个字符数组s[],把“hahahaha”赋值给s[]

    for (int i = 0; i < 60; ++i)         //循环输出字符串的单个字符
     {
            printf("%c", s[i]);
    }
    
    return 0;
}


因为不知道这两个数组的地址间隔多少,所以取了个比较大的值,的确把数组 a[] 的“hello world!” 也输出出来了。


如果我想取一段有用的数据,我不知道这段数据的地址,但是恰好我知道他前面的地址,我该怎么办呢得意

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值