首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 字符串指針排序內存非法:二維數組列數需 ≥ 最大字符串長度+1,否則無結束符導致 strcpy 越界

     編輯:程式設計綜合問答

代碼:`char ss[10][5] = {"worin", ...}` → 最長串長 5,但無 `\0` 空間,`strcpy` 越界寫入相鄰內存。

修正

char ss[10][6] = {"worin", "trafi", "panda", "dalai", "lama2", "strin", "tende", "racof", "lenth", "recte"};
// 或動態分配
char** ss = malloc(10 * sizeof(char*));
for (int i=0; i<10; ++i) ss[i] = strdup(arr[i]);

排序邏輯優化

void sort(char* p[], int n) { // 指針數組排序,不動數據
    for (int i=0; i 0) {
                char* tmp = p[j]; p[j] = p[j+1]; p[j+1] = tmp;
            }
}

**核心教訓**:C 字符串**必須**以 `\0` 結尾,數組列數 ≥ `strlen(max) + 1`。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved