首页 > 代码库 > sizeof对函数入参使用不准
sizeof对函数入参使用不准
被调用函数内部,无法知道入参的字符数组的可用内存长度
所以函数字符指针作为入参时,一定要加一个 此指针指向的内存空间长度入参int nSize
错误的写法:
1 #include "stdafx.h" 2 #include <string.h> 3 #include <stdarg.h> 4 5 // 返回非0表达式验证不通过,不用调用子系统功能号 6 int getFilters(char * pszInput, char *pszFuncid) 7 { 8 char sztmp[64]={0,}; 9 char szFilters[256]={0,}; 10 char szFilter[256]={0,}; 11 char szFilterName[64]={0,}; 12 char szFilterVal[256]={0,}; 13 char sztmpVal[512]={0,}; 14 15 // 被调用函数内部,无法知道字符数组的可用内存长度 16 //所以函数形参字符指针,用char * pszInput,int nSize 17 // int a = sizeof(pszInput); //sizeof不准 a=4 18 // int b = sizeof(*pszInput); //sizeof不准 b=1 19 // int c = strlen(pszInput); //strlen测量字符串的字符个数 c=18 20 strncpy(sztmpVal, pszInput, sizeof(pszInput)); // sztmpVal = "2610" 21 22 //... 23 return 0; 24 } 25 26 27 28 int _tmain(int argc, _TCHAR* argv[]) 29 { 30 char szFuncid[64]={0,}; 31 char szOtcCfg[512]={0,}; 32 33 sprintf(szOtcCfg,"26100012[EMAIL=wx]"); 34 35 int b = sizeof(szOtcCfg); // b=512 36 getFilters(szOtcCfg, szFuncid); 37 38 getchar(); 39 40 return 0; 41 }
正确的写法:
1 // test.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <string.h> 6 #include <stdarg.h> 7 8 // 返回非0表达式验证不通过,不用调用子系统功能号 9 int getFilters(char * pszInput,int nSize, char *pszFuncid) 10 { 11 char sztmp[64]={0,}; 12 char szFilters[256]={0,}; 13 char szFilter[256]={0,}; 14 char szFilterName[64]={0,}; 15 char szFilterVal[256]={0,}; 16 char sztmpVal[512]={0,}; 17 18 // 被调用函数内部,无法知道字符数组的可用内存长度, 所以函数形参字符指针,要用char * pszInput,int nSize 19 // int a = sizeof(pszInput); //sizeof不准 a=4 20 // int b = sizeof(*pszInput); //sizeof不准 b=1 21 // int c = strlen(pszInput); //strlen测量字符串的字符个数 c=18 22 strncpy(sztmpVal, pszInput, nSize); // sztmpVal=26100012[EMAIL=wx] 23 24 // ... 25 26 return 0; 27 } 28 29 30 31 int _tmain(int argc, _TCHAR* argv[]) 32 { 33 char szFuncid[64]={0,}; 34 char szOtcCfg[512]={0,}; 35 36 sprintf(szOtcCfg,"26100012[EMAIL=wx]"); 37 38 int b = sizeof(szOtcCfg); 39 getFilters(szOtcCfg, sizeof(szOtcCfg), szFuncid); 40 41 getchar(); 42 43 return 0; 44 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。