| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 844 人关注过本帖
标题:关于可选函数
只看楼主 加入收藏
未来大仙
Rank: 6Rank: 6
来 自:黑窟窿
等 级:侠之大者
威 望:4
帖 子:263
专家分:491
注 册:2015-6-20
结帖率:70%
收藏
已结贴  问题点数:20 回复次数:11 
关于可选函数
本人对可选函数相当的疑惑。。#include<string.h>  书上说有了这个头文件就可以使用可选函数。。并且还要定义这样的东西#define __STDC_WANT_LIB_EXT1__ 1   才可以使用 然而,这两个我都用了。。但是当我用可选函数的时候就是不能运行,而且出现大堆的错误。。
程序代码:
#define __STDC_WANT_LIB_EXT1__ 1
#include<string.h>
#include<stdio.h>
int main(void)
{
    char preamble[]="the joke is:\n\n";
    char str[][40]={
        "my dog hasn\'t got any nose.\n",
        "how do yours\n",
        "my dog smells horrible.\n"
    };
    unsigned int strCount = sizeof(str)/sizeof(str[0]);
    unsigned int length = 0;
    for(unsigned int i = 0;i<strCount;++i)
    length +=strnlen(preamble,sizeof(str[i]));
    char joke[length + strnlen(preamble,sizeof(preamble))+1];
    if(strncpy(joke,sizeof(joke),preamble,sizeof(preamble)))
    {
        printf("wocao!!");
        return 1;
    }
    for(unsigned int i=0;i<strCount;++i)
    {
        if(strncat(joke,sizeof(joke),str[i],sizeof(str[i])))
        {
            printf("wocao ????");
            return 2;
        }
        printf("%s",joke);
        return 0;
   这究竟是怎么回事?求解决。。 一直说 该函数在这范围内没有被声明。。
2015-09-16 13:42
未来大仙
Rank: 6Rank: 6
来 自:黑窟窿
等 级:侠之大者
威 望:4
帖 子:263
专家分:491
注 册:2015-6-20
收藏
得分:0 
以下是引用未来大仙在2015-9-16 13:42:15的发言:

本人对可选函数相当的疑惑。。#include<string.h>  书上说有了这个头文件就可以使用可选函数。。并且还要定义这样的东西#define __STDC_WANT_LIB_EXT1__ 1   才可以使用 然而,这两个我都用了。。但是当我用可选函数的时候就是不能运行,而且出现大堆的错误。。#define __STDC_WANT_LIB_EXT1__ 1
#include<string.h>
#include<stdio.h>
int main(void)
{
    char preamble[]="the joke is:\n\n";
    char str[][40]={
        "my dog hasn\'t got any nose.\n",
        "how do yours\n",
        "my dog smells horrible.\n"
    };
    unsigned int strCount = sizeof(str)/sizeof(str[0]);
    unsigned int length = 0;
    for(unsigned int i = 0;i<strCount;++i)
    length +=strnlen(preamble,sizeof(str));
    char joke[length + strnlen(preamble,sizeof(preamble))+1];
    if(strncpy(joke,sizeof(joke),preamble,sizeof(preamble)))
    {
        printf("wocao!!");
        return 1;
    }
    for(unsigned int i=0;i<strCount;++i)
    {
        if(strncat(joke,sizeof(joke),str,sizeof(str)))
        {
            printf("wocao ????");
            return 2;
        }
        printf("%s",joke);
        return 0;   这究竟是怎么回事?求解决。。 一直说 该函数在这范围内没有被声明。。
      大家只要告诉我为什么那些可选函数用不了就行了。不用对这个代码做什么解释- -。。比如 strncat_s   strnlen_s  这些。。

好好学习,天天向上!
2015-09-16 13:43
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:5 
不知道你在说什么
首先你代码不完整,你自己能看出来吗?
“一直说 该函数在这范围内没有被声明。” --- 该函数是哪个函数呀,说清楚点不行呀?
strncpy 怎么带了4个参数,看C++标准
#include <string.h>
char *strncpy(char * restrict s1,
const char * restrict s2,
size_t n);

2015-09-16 14:12
未来大仙
Rank: 6Rank: 6
来 自:黑窟窿
等 级:侠之大者
威 望:4
帖 子:263
专家分:491
注 册:2015-6-20
收藏
得分:0 
回复 3楼 rjsp
都说可选函数咯- -  strncat_s  strnlen_s

好好学习,天天向上!
2015-09-16 14:15
未来大仙
Rank: 6Rank: 6
来 自:黑窟窿
等 级:侠之大者
威 望:4
帖 子:263
专家分:491
注 册:2015-6-20
收藏
得分:0 
回复 3楼 rjsp
有_s 的 都说没有声明。

好好学习,天天向上!
2015-09-16 14:16
未来大仙
Rank: 6Rank: 6
来 自:黑窟窿
等 级:侠之大者
威 望:4
帖 子:263
专家分:491
注 册:2015-6-20
收藏
得分:0 
以下是引用rjsp在2015-9-16 14:12:17的发言:

不知道你在说什么
首先你代码不完整,你自己能看出来吗?
“一直说 该函数在这范围内没有被声明。” --- 该函数是哪个函数呀,说清楚点不行呀?
strncpy 怎么带了4个参数,看C++标准

还有,呵呵,这段代码是抄书上的。。只是字符窜被我改了而已..

好好学习,天天向上!
2015-09-16 14:17
未来大仙
Rank: 6Rank: 6
来 自:黑窟窿
等 级:侠之大者
威 望:4
帖 子:263
专家分:491
注 册:2015-6-20
收藏
得分:0 
以下是引用rjsp在2015-9-16 14:12:17的发言:

不知道你在说什么
首先你代码不完整,你自己能看出来吗?
“一直说 该函数在这范围内没有被声明。” --- 该函数是哪个函数呀,说清楚点不行呀?
strncpy 怎么带了4个参数,看C++标准

strcpy 第一个参数是复制目标,第二个是第一个参数的大小。。第三是源字符串指定目标字符串的长度 第四个是指定从第三个参数指定的源字符串中复制的最大字符串。。

好好学习,天天向上!
2015-09-16 14:22
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
传说中  这些带有_s的函数 是vs特有的  其他的编译器(ide)啥的  无法使用

DO IT YOURSELF !
2015-09-16 14:42
未来大仙
Rank: 6Rank: 6
来 自:黑窟窿
等 级:侠之大者
威 望:4
帖 子:263
专家分:491
注 册:2015-6-20
收藏
得分:0 
回复 8楼 wp231957
我把_s 去掉了- -为何照样无法使用。。

好好学习,天天向上!
2015-09-16 14:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
回复 5楼 未来大仙
你的问题是不是
在某某编译器上,为什么 #define __STDC_WANT_LIB_EXT1__ 1 后仍然没有 strncpy_s 等函数?


如果是,C标准如是说
Implementations that do not define __STDC_LIB_EXT1__ are not required to conform to these specifications.
也就是 Bounds-checking interfaces 属于可选的,编译器(其实是标准库啦)可以不支持它。

2015-09-16 14:47
快速回复:关于可选函数
数据加载中...
 
   



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

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