Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- // This fails if str isn't correctly terminated
- int nums1(const char *str, size_t unused) {
- char *a;
- a = (char *)str;
- int num = 0;
- printf("%x: ", a);
- if(!str) return num;
- while(*a) {
- if(*a == ',') num++;
- printf("(%c) %x ", *a, a);
- a++;
- }
- printf("\n");
- return num;
- }
- // This fails if str isn't correctly terminated
- int nums2(const char *str, size_t unused) {
- int i;
- int num = 0;
- printf("%x: ", str);
- if(!str) return num;
- for(i = 0; i < strlen(str); i++) {
- printf("(%c) %x ", str[i], &str[i]);
- if(str[i] == ',') num++;
- }
- printf("\n");
- return num;
- }
- // likely the safest assuming a correct len is passed in
- int nums3(const char *str, size_t len) {
- int i;
- int num = 0;
- printf("%x: ", str);
- if(!str) return num;
- for(i = 0; i < strnlen(str, len); i++) {
- printf("(%c) %x ", str[i], &str[i]);
- if(str[i] == ',') num++;
- }
- printf("\n");
- return num;
- }
- // I'm not so sure @koorogi
- int nums4(const char *str, size_t len) {
- int num = 0;
- printf("%x: ", str);
- if(!str) return num;
- const char *a = strchr(str, ',');
- while (a) {
- // Print the whole string of what's left
- printf("(%s) %x ", a, a);
- a = strchr(a + 1, ',');
- num++;
- }
- printf("\n");
- return num;
- }
- #define nums(x, y) nums4(x, y)
- #define STRSIZE 9
- int main(int argc, char *argv[]) {
- printf("%d\n", nums("", 0));
- printf("%d\n", nums("5, 10", 6));
- char str1[] = "5, 10";
- printf("%d\n", nums(str1, strlen(str1)));
- char *str2 = "5, 10";
- printf("%d\n", nums(str2, strlen(str2)));
- char str3[STRSIZE] = "5, 10";
- // Overflow str3 by 1
- int i;
- for(i = 0; i <= STRSIZE; i++)
- str3[i] = 0x61;
- printf("%d\n", nums(str3, STRSIZE));
- char str4[STRSIZE] = "5, 10";
- // Overflow str4 by 1 after "5, 10"
- for(i = 5; i <= STRSIZE; i++)
- str4[i] = 0x61;
- printf("%d\n", nums(str4, STRSIZE));
- // Never trust the user...
- printf("%d\n", nums(NULL, 0));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement