Why do these two programs give different outputs in VC++2008?
After all, the same strings are compared.
strcmp__usage.c
#include <stdio.h>
#include <string.h>
main()
{
char targetString[] = "klmnop";
printf ("Compare = %d\n", strcmp(targetString, "abcdef"));
printf ("Compare = %d\n", strcmp(targetString, "abcdefgh"));
printf ("Compare = %d\n", strcmp(targetString, "jlmnop"));
printf ("Compare = %d\n", strcmp(targetString, "klmnop"));
printf ("Compare = %d\n", strcmp(targetString, "klmnoq"));
printf ("Compare = %d\n", strcmp(targetString, "uvwxyz"));
printf ("Compare = %d\n", strcmp(targetString, "xyz"));
}
Output
Compare = 1
Compare = 1
Compare = 1
Compare = 0
Compare = -1
Compare = -1
Compare = -1
strncmp_usage.c
#include <stdio.h>
#include <string.h>
main()
{
char targetString[] = "klmnopqrstuvwxyz";
int n = 6;
printf ("Compare = %d\n", strncmp(targetString, "abcdef", n));
printf ("Compare = %d\n", strncmp(targetString, "abcdefgh", n));
printf ("Compare = %d\n", strncmp(targetString, "jlmnop", n));
printf ("Compare = %d\n", strncmp(targetString, "klmnop", n));
printf ("Compare = %d\n", strncmp(targetString, "klmnoq", n));
printf ("Compare = %d\n", strncmp(targetString, "uvwxyz", n));
printf ("Compare = %d\n", strncmp(targetString, "xyz", n));
}
Output
Compare = 10
Compare = 10
Compare = 1
Compare = 0
Compare = -1
Compare = -10
Compare = -13
Both strcmp and strncmp provide the guarantee that the result will include:
The actual number returned (1/-1 or 12/-13) is implementation specific, and can be any value. The only portion that matters is that both return 0, less than zero, or greater than zero. In that respect, they provide the same answer.