实例说明定义变量时为什么需要初始化

在项目中,由于忘记初始化http客户端代码中的字符串临时变量,导致数据上传错误。测试表明,局部变量在函数加载时地址固定,但在复杂调用环境中,未初始化的变量值可能被其他线程修改,影响函数输出。因此,对于可能被多次调用的函数,初始化所有局部变量是必要的,以确保程序的正确性。
摘要由CSDN通过智能技术生成

  项目中自己实现了一个简单的http客户端,测试时发现上传至服务器的数据发生了错误,排查问题发现,在http组包的代码中忘记对字符串临时变量进行初始化操作。

  写了如下测试代码:

//测试代码1:将未进行变量初始化操作的代码置于循环体中
#include <stdio.h>
#include <string.h>
int main()
{
    int i=20;
    while(i-->0)
    {
        char tmp[50];
        int int_test;
        if(19==i)
        {
            int_test=0;
            tmp[0]='\0';
        }
        printf("tmp:%s\nint_test:%d\n",tmp,int_test);
        char test[5]="";
        sprintf(test,"%d",i);
        strcat(tmp,test);
        int_test+=i;
    }
    return 0;
}

//测试代码1: 输出
tmp:
int_test:0
tmp:19
int_test:19
tmp:1918
int_test:37
tmp:191817
int_test:54
tmp:19181716
int_test:70
tmp:1918171615
int_test:85
tmp:191817161514
int_test:99
tmp:19181716151413
int_test:112
tmp:1918171615141312
int_test:124
tmp:191817161514131211
int_test:135
tmp:19181716151413121110
int_test:145
tmp:191817161514131211109
int_test:154
tmp:1918171615141312111098
int_test:162
tmp:19181716151413121110987
int_test:169
tmp:191817161514131211109876
int_test:175
tmp:1918171615141312111098765
int_test:180
tmp:19181716151413121110987654
int_test:184
tmp:191817161514131211109876543
int_test:187
tmp:1918171615141312111098765432
int_test:189
tmp:19181716151413121110987654321
int_test:190


//测试代码2 : 将未进行变量初始化操作的代码置于某函数体中
#include <stdio.h>
#include <string.h>
void just_for_test(int i)
{
    char tmp[50];
    int int_test;
    if(19==i)
    {
        int_test=0;
        tmp[0]='\0';
    }
    printf("tmp:%s\nint_test:%d\n",tmp,int_test);
    char test[5]="";
    spr
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值