c c 整理 字串(2)

2021-07-30 11:27:22 字數 1778 閱讀 7315

試題1

#include #include int main()

這題str1有11個元素,string只有10個元素,拷貝的時候,記憶體不夠,陣列越界,會出現錯誤。

試題2

#include #include int main()

strcpy(string, str1);

return 0;

}

這題strcpy函式是以『\0』標誌結束拷貝的,但是for迴圈結束後,str1並沒有加『\0』,strcpy無法判斷拷貝的結束時間。其次,在12行之前加上str[i]='\0',答案還是有問題的,因為這個時候str1陣列越界了。

試題3

#include #include void test(char* str1)

return 0;

}

這題if語句比較的是strlen(str1),當strlen(str1)等於10的時候,str1實際長度為strlen(str1)+1,這個時候拷貝給string,陣列越界。

#include #define max 255

int main(char* str1)

return 0;

}

這裡for迴圈終止條件出現錯誤,unsigned char的範圍是0~255,所以判斷條件一直為真,導致無限迴圈,應將判斷條件改為i

#include int main(char* str1)

, *p;

p = a;

printf("%d\n", *(p+4*sizeof(int)));

return 0;

}

第6行中將p的值賦為陣列首位址,那麼p+4已經到最後乙個元素了,*(p+4*sizeof(int))指向了陣列第17個元素了,已經越界。

#include int my_strlen(char* str)

int len = 0;

while(*str++ != '\0') len++;

return len;

}int my_strlen2(char* str)

char* pstr = str;

while(*str++ != '\0');

return (str - pstr - 1);

}int main()

這裡寫了兩種方法實現strlen的功能,第一種while迴圈遍歷的時候需要進行兩次自加,小號的資源比第二種多,第二種先儲存初始位址,while迴圈只是str的自加,效率更高。

請寫乙個函式,實現從乙個字串中,查詢另乙個字串的位置,如strstr("12345", "34")返回值為2,即在2號位置找到字串「34」

#include const char* my_strstr(const char* str1, const char* str2)

while(*str1)

}str1++; }}

int main()

比較步驟:(1)「12345」和「34」比較,不滿足匹配

(2)「2345」和「34」比較,不滿足匹配

(3)「345」和「34」比較,滿足匹配

輸出:

r:345

C C 字串型別的用法整理筆記

字串型別,即string型別,因為使用方便,不必擔心記憶體問題,越界問題等等,還有在不太確定即將存入的字串長度的時候使用是非常好的。本片中,將會對string型別的字串和char型別的字串對比使用講解,作為隨筆筆記,記錄常用的用法,同時也會隨著見識的增長隨時更新 string 型別字串在使用的時候需...

字串 簡單 1544 整理字串

題目 給你乙個由大小寫英文本母組成的字串 s 乙個整理好的字串中,兩個相鄰字元 s i 和 s i 1 其中 0 i s.length 2 要滿足如下條件 若 s i 是小寫字元,則 s i 1 不可以是相同的大寫字元。若 s i 是大寫字元,則 s i 1 不可以是相同的小寫字元。請你將字串整理好...

字串相減 c c

string a goodluck string b luck int length strlen a.c str strlen b.c str string c a.substr 0,length 主要是substr 的用法 返回乙個從指定位置開始,並具有指定長度的子字串。引數 start 必選。...