strncmp()
Hàm strncmp() so sánh chuỗi bên trái với chuỗi bên phải tối đa n ký tự. Hoạt động tương tự strcmp() nhưng giới hạn số ký tự so sánh.
- Trả về > 0: Ký tự khác nhau đầu tiên của chuỗi trái có mã ASCII lớn hơn
- Trả về < 0: Ký tự khác nhau đầu tiên của chuỗi trái có mã ASCII nhỏ hơn
- Trả về 0:
nký tự đầu tiên của hai chuỗi giống hệt nhau
Cú pháp
int strncmp(const char *leftStr, const char *rightStr, size_t n);
Tham số
- leftStr - Chuỗi thứ nhất
- rightStr - Chuỗi thứ hai
- n - Số ký tự tối đa so sánh
Ví dụ strncmp()
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "blank";
char str2[] = "Hello World!";
int result = strncmp(str1, str2, 1); // Chỉ so sánh 1 ký tự đầu
if (result == 0)
printf("Chuỗi bằng nhau (theo n ký tự)\n");
else
printf("Chuỗi khác nhau\n");
printf("Giá trị trả về: %d\n", result); // 'b'(98) - 'H'(72) = 26
return 0;
}
Kết quả
Chuỗi khác nhau Giá trị trả về: 26
strcmp()
Hàm strcmp() so sánh toàn bộ hai chuỗi theo thứ tự từ điển (lexicographically), ký tự bởi ký tự cho đến khi gặp ký tự khác nhau hoặc ký tự NULL (\0).
Cú pháp
int strcmp(const char *leftStr, const char *rightStr);
Ví dụ strcmp()
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "hello World!";
char str2[] = "Hello World!";
int result = strcmp(str1, str2); // So sánh toàn bộ chuỗi
if (result == 0)
printf("Chuỗi giống hệt nhau\n");
else
printf("Chuỗi khác nhau\n");
printf("Giá trị trả về: %d\n", result); // 'h'(104) - 'H'(72) = 32
return 0;
}
Kết quả
Chuỗi khác nhau Giá trị trả về: 32
Bảng so sánh tóm tắt
| Đặc điểm | strcmp() | strncmp() |
|---|---|---|
| So sánh bao nhiêu ký tự | Toàn bộ chuỗi | Tối đa n ký tự |
| Dừng khi | Gặp \0 hoặc khác nhau | Gặp \0, khác nhau, hoặc đủ n ký tự |
| An toàn hơn | Không (có thể đọc vượt bộ nhớ) | Có (giới hạn độ dài) |