
Ngôn ngữ lập trình C ra đời hơn năm thập kỷ trước và từ đó đã trở thành một trong những ngôn ngữ phổ biến nhất. C nổi bật nhờ các đặc điểm như cấu trúc đơn giản, hàm, tính di động, quản lý bộ nhớ hiệu quả. Trong số đó, hàm là tài sản quan trọng nhất giúp lập trình viên viết mã mạnh mẽ.
Hàm itoa là một hàm không chuẩn được sử dụng rộng rãi để chuyển đổi kiểu dữ liệu. Nó nhận một số nguyên (int) làm đầu vào và chuyển thành chuỗi ký tự. Tuy nhiên, nhiều người chưa biết cách sử dụng nó. Hướng dẫn này giải thích ngắn gọn cách dùng hàm itoa trong C.
Cú pháp cơ bản
Dưới đây là ví dụ đơn giản minh họa cú pháp itoa:
int main() {
int num = 12345;
char str[20];
itoa(num, str, 10);
printf("Integer: %d\nString: %s\n", num, str);
return 0;
}
Trong chương trình trên:
- num là số nguyên cần chuyển đổi.
- str là mảng ký tự lưu kết quả.
- 10 là cơ số (hệ thập phân).
Triển khai hàm itoa
Dưới đây là một triển khai mẫu của itoa kèm chương trình hoàn chỉnh:
#include <stdio.h>
#include <stdlib.h>
void itoa(int num, char *str, int base) {
int i = 0;
int isNegative = 0;
if (num == 0) {
str[i++] = '0';
str[i] = '\0';
return;
}
if (num < 0 && base != 10) {
isNegative = 1;
num = -num;
}
while (num != 0) {
int rem = num % base;
str[i++] = (rem > 9) ? (rem - 10) + 'a' : rem + '0';
num = num / base;
}
if (isNegative && base == 10)
str[i++] = '-';
str[i] = '\0';
// Đảo ngược chuỗi vì các chữ số được lấy theo thứ tự ngược
int start = 0;
int end = i - 1;
while (start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
int main() {
int num;
printf("Nhập một số nguyên: ");
if (scanf("%d", &num) != 1) {
fprintf(stderr, "Đầu vào không hợp lệ. Vui lòng nhập số nguyên.\n");
return EXIT_FAILURE;
}
int max_size = snprintf(NULL, 0, "%d", num) + 1;
char *str = (char *)malloc(max_size);
if (str == NULL) {
fprintf(stderr, "Cấp phát bộ nhớ thất bại\n");
return EXIT_FAILURE;
}
itoa(num, str, 10);
printf("Số nguyên: %d\nChuỗi: %s\n", num, str);
free(str);
return 0;
}
Giải thích chi tiết
- Khi
num == 0, hàm gán ký tự'0'và kết thúc. - Nếu
num < 0và cơ số khác 10, đặt cờ âm và lấy giá trị tuyệt đối. - Vòng lặp
whiletrích xuất từng chữ số (phép chia lấy dư), chuyển thành ký tự tương ứng (với cơ số > 10 dùng 'a'..'f'). - Sau vòng lặp, nếu số ban đầu âm và cơ số 10, thêm dấu
'-'. - Kết thúc chuỗi bằng
'\0'và đảo ngược chuỗi vì các chữ số được sinh ra theo thứ tự ngược.
Chương trình cấp phát bộ nhớ cho chuỗi kết quả, gọi itoa, in ra màn hình và giải phóng bộ nhớ.

Nếu nhập không phải số nguyên, chương trình báo lỗi:
Kết luận
Bạn đã thấy cách triển khai và sử dụng hàm itoa trong C. Ví dụ này minh họa chuyển đổi số nguyên thành chuỗi; bạn có thể kết hợp itoa với nhiều hàm khác để xây dựng chương trình phức tạp hơn.
Tác giả

Prateek Jangid
Người dùng Linux đam mê, luôn khám phá và chia sẻ kiến thức mới về Linux.
