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("%x ", 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("%x ", &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("%x ", &str[i]);
- if(str[i] == ',') num++;
- }
- printf("\n");
- return num;
- }
- #define nums(x, y) nums1(x, y)
- 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[9] = "5, 10";
- // Overflow str3 by 1
- int i;
- for(i = 0; i <= 9; i++)
- str3[i] = 0x7F;
- printf("%d\n", nums(str3, 9));
- printf("%d\n", nums(NULL, 0));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement