91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

字符串典型問題分析

發布時間:2020-07-18 08:58:47 來源:網絡 閱讀:181 作者:peter2017 欄目:編程語言

典型問題一:

   1.下面的程序輸出什么為什么?


#include<stdio.h>
int main()
{

    char buf[10] = {0};
    char src[] = "hello %s";
    snprintf(buf, sizeof(buf), src);
    printf("buf=%s\n", buf);
    return 0;
}

在linux下運行得到的結果如圖:

字符串典型問題分析

分析:

首先要搞懂snprint()函數的功能。

int snprintf(char* buffer,int buf_size,const char* fomart,........)

當函數只有3個參數時,如果第三個參數沒有包含格式化信息,函數調用沒有問題;相反,如果第三個參數包含了格式化信息,但缺少后續對應參數,則程序運行結果不確定。

注意:格式化信息必須與變參個數相匹配。

在這個例子中,第三個參數src包含了格式化信息%s,但是我們沒有提供%s所需要的字符串,所以程序運行的結果如圖所示。

#include<stdio.h>
int main()
{

    char buf[10] = {0};
    char src[] = "hello word";
    snprintf(buf, sizeof(buf), src);
    printf("buf=%s\n", buf);
    return 0;
}

運行結果如圖:

字符串典型問題分析

如果src里面包含格式化信息,則在snprintf()函數里面要添加第四個參數,且這個參數必須是字符串。

#include<stdio.h>
int main()
{

    char buf[11] = {0};
    char src[] = "hello %s";
    snprintf(buf, sizeof(buf), src,"world");
    printf("buf=%s\n", buf);
    return 0;
}

字符串典型問題分析

典型問題二:

#define STR "hello,\0D.T.Software\0"
#include<stdio.h>
int main()
{

    char* src = STR;
    char buf[255] = { 0 };
    printf(buf, sizeof(buf), src);
    printf("strlen(STR)=%d\n", strlen(STR));  //7
    printf("sizeof(STR)=%d\n", sizeof(STR)); //22
    printf("strlen(src)=%d\n",strlen(src));  //7
    printf("sizeof(src)=%d\n",sizeof(src));   //4
    printf("strlen(buf)=%d\n",strlen(buf));  //7
        printf("sizeof(buf)=%d\n",sizeof(buf));  //255
    printf("src=%s\n", src);               //hello.        
    printf("buf=%s\n", buf);               //hello.
    return 0;
}

分析:1.字符串相關的函數均以第一個出現的'\0'作為結束符。

           2.編譯器總是會在字符串字面量的末尾添加'\0'。

           3.字符串字面量的本質為數組。

        

  字符串   字符數組  字符指針 三者的本質是不同的,但是他們相互之間又有聯系,字符串是一個特殊的字符數組,字符指針可以指向一個字符數組。因此,字符指針可以指向字符串。


典型問題三:

字符串典型問題分析


運行結果:

字符串典型問題分析

在程序運行的過程中GCC編譯器看到“D.T.Soft"已經被S1定義到了只讀存儲區,當發現"D.T.Soft”又被S2定義的時候 這個時候GCC編譯器會進行優化,將S1.S2映射到同一塊內存空間上面去。所以s1==s2是相等的。這樣避免了內存的浪費。

同樣,若是用strcmp(s1,s2)==0 ;這個時候返回的結果是True;因為strcmp()主要是比較s1.s2的內容。所以是相等的。


分析:

  1. 字符串之間的相等比較需要用strcmp完成

  2. 不可直接用==進行字符串直接的比較

  3. 完全相同的字符串字面量的==比較結果為false



    注意:一些現代編譯器能夠將相同的字符串字面量映射到同一個無名字符數組,因此==比較結果為true;



典型問題四:

  字符串循環右移

void right_shift_r(const char* src,char* result,unsigned int n);

函數功能:將輸入字符串src循環右移n位,result為輸出結果。

字符串典型問題分析


分析:

字符串典型問題分析

#include<stdio.h>
#include<string.h>

void right_shift_r(const char* src, char* result, unsigned int n)
{
    int len = strlen(src);
    int i = 0;
    for (i = 0; i < len; i++)
    {
        result[(n + i) % len] = src[i];
    }
    result[len] = '\0';
}


int main()
{

    char result[255] = { 0 };
    right_shift_r("abcde", result, 2);
    printf("%s\n", result);
    system("pause");
}

字符串典型問題分析


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南靖县| 敦煌市| 武川县| 永昌县| 莱州市| 黔西县| 定安县| 吐鲁番市| 左贡县| 都匀市| 蕉岭县| 阜南县| 霸州市| 佛山市| 房山区| 霍邱县| 荣昌县| 同江市| 茌平县| 丹巴县| 精河县| 东辽县| 新乡县| 溆浦县| 雅江县| 大渡口区| 丹棱县| 和政县| 丰台区| 永昌县| 甘孜| 疏附县| 新晃| 龙川县| 连云港市| 固阳县| 蓬安县| 微山县| 霍城县| 洱源县| 青田县|