void cmdsend(unsigned int *info) {
unsigned int k;
for (k = 0; ((*info) != '\0') && (info != NULL); *info++, k++)
printf("senddata is %d\r\n", *info);
}
陣列 senddata[2] = 0 被誤判為結束符 '\0',導致迴圈提早結束,僅輸出前兩個元素。
int/unsigned int 陣列。*info++ 修改了呼叫端的指標副本,且若超出邊界解參考會導致未定義行為。void cmdsend(const unsigned int *info, size_t len) {
for (size_t k = 0; k < len; ++k) {
printf("senddata is %u\r\n", info[k]); // 或 *(info + k)
}
}
// 呼叫端
unsigned int senddata[5] = {8, 2, 0, 4, 5};
cmdsend(senddata, 5); // 明確傳遞元素個數
typedef struct {
unsigned int *data;
size_t length;
} UIntArray;
void cmdsend(UIntArray arr) {
for (size_t i = 0; i < arr.length; ++i)
printf("%u ", arr.data[i]);
}
const T* 表明唯讀,避免意外修改原始資料。size_t 表示長度/索引,符合標準庫慣例且避免負值。len > 0 && info != NULL。遵循「指標+長度」慣例,是 C 語言處理陣列參數最安全、最通用的模式。