Advertisement
losinggeneration

C strings

Jun 26th, 2013
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.38 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. // This fails if str isn't correctly terminated
  5. int nums1(const char *str, size_t unused) {
  6.     char *a;
  7.     a = (char *)str;
  8.     int num = 0;
  9.  
  10.     printf("%x: ", a);
  11.     if(!str) return num;
  12.     while(*a) {
  13.         if(*a == ',') num++;
  14.         printf("%x ", a);
  15.         a++;
  16.     }
  17.     printf("\n");
  18.  
  19.     return num;
  20. }
  21.  
  22. // This fails if str isn't correctly terminated
  23. int nums2(const char *str, size_t unused) {
  24.     int i;
  25.     int num = 0;
  26.     printf("%x: ", str);
  27.     if(!str) return num;
  28.     for(i = 0; i < strlen(str); i++) {
  29.         printf("%x ", &str[i]);
  30.         if(str[i] == ',') num++;
  31.     }
  32.     printf("\n");
  33.  
  34.     return num;
  35. }
  36.  
  37. // likely the safest assuming a correct len is passed in
  38. int nums3(const char *str, size_t len) {
  39.     int i;
  40.     int num = 0;
  41.  
  42.     printf("%x: ", str);
  43.  
  44.     if(!str) return num;
  45.  
  46.     for(i = 0; i < strnlen(str, len); i++) {
  47.         printf("%x ", &str[i]);
  48.         if(str[i] == ',') num++;
  49.     }
  50.     printf("\n");
  51.  
  52.     return num;
  53. }
  54.  
  55. #define nums(x, y) nums1(x, y)
  56.  
  57. int main(int argc, char *argv[]) {
  58.     printf("%d\n", nums("", 0));
  59.     printf("%d\n", nums("5, 10", 6));
  60.  
  61.     char str1[] = "5, 10";
  62.     printf("%d\n", nums(str1, strlen(str1)));
  63.  
  64.     char *str2 = "5, 10";
  65.     printf("%d\n", nums(str2, strlen(str2)));
  66.  
  67.     char str3[9] = "5, 10";
  68.     // Overflow str3 by 1
  69.     int i;
  70.     for(i = 0; i <= 9; i++)
  71.         str3[i] = 0x7F;
  72.     printf("%d\n", nums(str3, 9));
  73.  
  74.     printf("%d\n", nums(NULL, 0));
  75.  
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement