int num_str[32]; // 整數陣列
sprintf(num_str, "%d", num); // 錯誤:第一參數需 char*

char num_str[32]; // 改為字元陣列
sprintf(num_str, "%d", num); // 正確
原碼 while (pt != '\0') 條件錯誤 (pt 是指標,應比較 *pt),且 pt 未遞增。修正迴圈:
char *pt = num_str;
while (*pt != '\0') {
int digit = *pt - '0';
if (digit >= 0 && digit <= 9) count[digit]++;
pt++;
}
#include
#include
#include
int main() {
int n; scanf("%d", &n);
int *arr = malloc(n * sizeof(int));
for (int i = 0; i < n; i++) scanf("%d", &arr[i]);
int count[10] = {0};
char buf[32];
for (int i = 0; i < n; i++) {
sprintf(buf, "%d", arr[i]);
for (char *p = buf; *p; p++) {
int d = *p - '0';
if (d >= 0 && d <= 9) count[d]++;
}
}
for (int d = 0; d < 10; d++) printf("%d-%d\n", d, count[d]);
free(arr);
return 0;
}
sprintf 第一參數必須是 char*;字串遍歷需解引用指標並遞增。修正型別與迴圈邏輯即可正確統計各數字出現次數。