| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1966 人关注过本帖
标题:用if测试函数返回值。
只看楼主 加入收藏
_Dennis_h
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-3-6
结帖率:90.91%
收藏
 问题点数:0 回复次数:10 
用if测试函数返回值。
程序代码:
#include <stdio.h>
#define _STDC_LIB_EXT1_ 1
#include <string.h>

int main (void)
{
    #if defined _STDC_LIB_EXT1_
        printf("OK!!\n");
    #else
        printf("NO!!\n");
    #endif

    char str1[50] = "To be, or not to be, ";
        char str2[] = "that is the question.";
    int retval = strcat_s(str1, sizeof(str1), str2);
    if(retval)
        printf("There was an error joining the strings. Error code = %d\n", retval);
    else
        printf("The combined strings:\n%s\n", str1);

return 0;
}

语句:int retval = strcat_s(str1, sizeof(str1), str2);是将strcat_s()函数的返回值给 retval吗?然后用if判断。
2015-03-10 13:53
_Dennis_h
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-3-6
收藏
得分:0 
1天了,为啥没人回啊。我觉得retval就是strcat_s()函数的返回值,然后就用if测试,判断是否返回值正确。但是为何retval要声明为int型? 不是size_t型吗?
2015-03-11 10:11
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 2楼 _Dennis_h
这个问题应该在string.h找答案,在这个头文件里对size_t的定义为typedef unsigned int size_t;这说明size_t不过是unsigned int的另一个名字。
其实有些问题根本不是问题,只是好多人没有追根索源的精神,张口就问的习惯很不好。

能编个毛线衣吗?
2015-03-11 10:34
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
百度:

size_t是标准C库中定义的,应为unsigned int,在64位系统中为 long unsigned int。

如果这个是正确的话  size_t 和int 还是有一些细微区别的

DO IT YOURSELF !
2015-03-11 10:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
爲什麽全都不看幫助的呢?真以爲省了那麽點幫助文檔佔用的磁盤空間對自己的學習有益嗎?strcat_s()函數的返回值是errno_t類型,即“錯誤代碼”,它的聲明是int,由於錯誤碼可正可負,故不是size_t。正確的寫法應是errno_t,不要像1樓代碼那樣自作聰明翻譯爲int,雖然是對的,但不能表達出邏輯意義,衹能誤導你——正因此,上面都以爲那是返回計數器,事實上不是,寫成errno_t絕不會發生這樣的誤解。

授人以渔,不授人以鱼。
2015-03-11 12:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
這個類型聲明在crtdefs.h頭中:
程序代码:
#ifndef _ERRNO_T_DEFINED
#define _ERRNO_T_DEFINED
typedef int errno_t;
#endif  /* _ERRNO_T_DEFINED */


strcat_s()函數的msdn幫助信息如下:
程序代码:
errno_t strcat_s(
   char *strDestination,
   size_t numberOfElements,
   const char *strSource
);
errno_t wcscat_s(
   wchar_t *strDestination,
   size_t numberOfElements,
   const wchar_t *strSource
);
errno_t _mbscat_s(
   unsigned char *strDestination,
   size_t numberOfElements,
   const unsigned char *strSource
);
template <size_t size>
errno_t strcat_s(
   char (&strDestination)[size],
   const char *strSource
); // C++ only
template <size_t size>
errno_t wcscat_s(
   wchar_t (&strDestination)[size],
   const wchar_t *strSource
); // C++ only
template <size_t size>
errno_t _mbscat_s(
   unsigned char (&strDestination)[size],
   const unsigned char *strSource
); // C++ only

返回值:
Return Value
Zero if successful; an error code on failure.

翻譯:如果成功返回零,失敗則返回一個錯誤代碼。

用法:由於返回値標識操作是否成功,所以是錯誤爲零時成功,即你應該用檢查返回値是否零來判斷執行的效果。不要用C的非零爲真語法,明確寫if (retval != 0) { 報錯 }


[ 本帖最后由 TonyDeng 于 2015-3-11 12:47 编辑 ]

授人以渔,不授人以鱼。
2015-03-11 12:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
MSDN兩個G的文檔,你買同樣容量的書,加起來也不止7000大元。値不値?看你是否覺得別人的(不算軟件,單算文檔寫作的)勞動値不値那個價了。D版,鬼子進村,你用就是了,冷嘲熱諷幹嘛呢,不見得你不用而用那些精簡的東西再另外買大量的書籍很劃算。

授人以渔,不授人以鱼。
2015-03-11 13:26
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 6楼 TonyDeng
T版主严谨!刚在string.h里找了,根本就没有strcat_s函数声明,不在string.h里,这个代码怎么能编译通过?百度了下,这个函数是vs2005以上版本定义的。

能编个毛线衣吗?
2015-03-11 14:34
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
是在string.h中聲明的:

图片附件: 游客没有浏览图片的权限,请 登录注册

授人以渔,不授人以鱼。
2015-03-11 15:00
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 9楼 TonyDeng
我的没安装vs,string.h的确没有这个声明,我刚才编译失败了,提示未声明的标示符错误:f:\vc\aaa\aaa.cpp(15) : error C2065: 'strcat_s' : undeclared identifier
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 wmf2014 于 2015-3-11 15:23 编辑 ]

能编个毛线衣吗?
2015-03-11 15:15
快速回复:用if测试函数返回值。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035910 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved