Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <malloc.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)));
- const 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));
- /* Not terminated */
- char str5[STRSIZE] = "012345678";
- printf("%d\n", nums(str5, STRSIZE));
- /* Never trust the user... */
- printf("%d\n", nums(NULL, 0));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement