代码-以下字符串是怎么连接的,求解释

问题描述

以下字符串是怎么连接的,求解释

//program 6.4 joining strings
#define STDC_WANT_LIB_EXT1 1
#include
#include
int main(void)
{
char preamble[] = "the joke is:nn";
char str[][40] = {
"My dog hasn't got any nose.n",
"How does your dog smell then?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_s(str[i], sizeof(str[i]));
char joke[length + strnlen_s(preamble, sizeof(preamble)) + 1];

if(strncpy_s(joke, sizeof(joke), preamble, sizeof(preamble)))
{
    printf("error copying preamble to joke.n");
    return 1;
}

for(unsigned int i = 0;  i < strCount ;  ++i)
{
    if(strncat_s(joke, sizeof(joke), str[i], sizeof(str[i])))
    {
        printf("error copying string str[%u].", i);
        return 2;
    }

}
    printf("%s", joke);
        return 0;

}
这段代码到底是怎么组合字符的,搞了半天只看懂一点!
希望大神能给详细解释解释 (快到指针了,好激动)

解决方案

#define STDC_WANT_LIB_EXT1 1
#include <stdio.h>
#include <string.h>
int main(void)
{
    char preamble[] = "the joke is:nn";
    char str[][40] =
    {
        "My dog hasn't got any nose.n",
        "How does your dog smell then?n",
        "My dog smells horrible.n"
    };
    // 计算出str数组中的str个数,本程序中str值为3
    unsigned int strCount = sizeof(str)/sizeof(str[0]);
    unsigned int length = 0;
    // strnlen_s函数返回字串的长度
    for (unsigned int i = 0; i < strCount ; ++i)
        length += strnlen_s(str[i], sizeof(str[i]));
            // length为str数组中的字符串拼接后总长度
    char joke[length + strnlen_s(preamble, sizeof(preamble)) + 1];

    //  先strncpy_s函数拷贝,再strncat_s函数连接,作用区域都是joke
    if (strncpy_s(joke, sizeof(joke), preamble, sizeof(preamble)))
    {
        printf("error copying preamble to joke.n");
        return 1;
    }

    for (unsigned int i = 0;  i < strCount ;  ++i)
    {
        if (strncat_s(joke, sizeof(joke), str[i], sizeof(str[i])))
        {
            printf("error copying string str[%u].", i);
            return 2;
        }

    }
    printf("%s", joke);
    return 0;
}
时间: 2024-09-14 23:38:33

代码-以下字符串是怎么连接的,求解释的相关文章

jsp-下边的代码谁懂啊,大神求解释。顺道告诉我下想学关于这个看什么,谢谢啦

问题描述 下边的代码谁懂啊,大神求解释.顺道告诉我下想学关于这个看什么,谢谢啦 <head> <jsp:include page='/res/inc/inc.jsp' flush='true'/> <style> .FixedTitleRow { position: relative; top: expression( this.offsetParent.scrollTop ); z-index: 10; background-color: #ffffff; } .Fi

软件开发-这代码为什么输出两个0?求解释。

问题描述 这代码为什么输出两个0?求解释. 语句Cwith t(3);中的3为什么不输出来?开发-这代码为什么输出两个0?求解释.-linux ls l 输出解释"> 解决方案 问题出现在这里Cstat( float p=0), 该为Cstat(float p) 解决方案二: 代码中的输出语句输出0吗,为什么 解决方案三: 少了这个图没发,真不好意思,我给补上 解决方案四: 然而 没代码 都不敢 大声说话

arm-基于lpc2114做sht11在lcd1602显示代码调试驱执行不了,求大神指教

问题描述 基于lpc2114做sht11在lcd1602显示代码调试驱执行不了,求大神指教 /**************************************************************************** 基于LPC2114做的一个SHT11温湿度传感器在LCD1602显示 ****************************************************************************/ #include "con

ip地址-求解释下这段代码...感激不尽

问题描述 求解释下这段代码...感激不尽 u_long ulDestIP; u_long ulDestIP1=inet_addr(a); u_long ulDestIP2=inet_addr(b); unsigned long count = ntohl(ulDestIP2 - ulDestIP1)-1; struct in_addr in; unsigned long hostip; for(unsigned int i = 0; i <=count+1; i++) { hostip = nt

指针-么么哒、这题用C语言为什么出现Segmentation fault,求解释并纠错(谢绝新代码)

问题描述 么么哒.这题用C语言为什么出现Segmentation fault,求解释并纠错(谢绝新代码) //依次输出字符串中的数字团,比如poq89ayu1u&129aa //就输出89,129,一共2个数. //萌妹纸诚心诚意求修改 include int main() { char str[80],*pstr; int i=0,flag=1,num=0;pstr=str; gets(str); while(flag==1) { for(i=0;(str+i)!='';i++) { if('

c-C语言输出数字团,代码为什么出现Segmentation fault,求解释并纠错??

问题描述 C语言输出数字团,代码为什么出现Segmentation fault,求解释并纠错?? //题目:输出字符串里数字团,以及个数.比如89cy129 //就输出89,129,一共2个数. 代码在这个百度知道的问题上:well,看来百度知道上面没有人会做? 跪谢!!! 源代码: include int main() { int a[80],i=0,*pa,an=0; char str[80],*pstr=str; void getnum(char pstr); gets(str); get

c语言-关于C语言链表的一些问题,代码怎么都运行不成功跪求大神指点

问题描述 关于C语言链表的一些问题,代码怎么都运行不成功跪求大神指点 下面代码主要实现链表的创建,插入,删除,并且能将两个年龄递增链表进行合并成递减链表 然而在插入和删除操作中gets函数无法起作用,strcmp函数也出现位置冲突报错..功力不足实在解决不了..跪求大神解答..(感觉自己写的东西除了上面两个错误应该还有,但是因为位置冲突问题就只能编译到那个地方无法进行下去..我肉眼实在找不出来.. #include<stdio.h> #include<stdlib.h> #incl

调用带参类的带参方法- 如何把字符串转换成用字符串显示的字符类型 求帮助!

问题描述 如何把字符串转换成用字符串显示的字符类型 求帮助! private String[] colName = null; // 列名数组private String[] colType = null; //存放数据类型private String[] colValue = null; // 列植 这里有三个数组是从数据库中读取这些数据 然后将这些数据转换成一个对象 老师留的仿hibernate的根据主键获取对象的方法 我知道要用类反射做 可是怎么用就不太明白了 我写了这么个代码 Class

string-随机生成字符串的方法 求解释

问题描述 随机生成字符串的方法 求解释 //产生长度为length的随机字符串 char* genRandomString(int length) { int flag i; char* string; srand((unsigned) time(NULL )); if ((string = (char*) myMalloc(length)) == NULL ) { myLog(""Malloc failed!flag:14 ""); return NULL ; }