Rewriting a function using pointers

  • Thread starter Thread starter magnifik
  • Start date Start date
  • Tags Tags
    Function Pointers
Click For Summary
The discussion focuses on rewriting a function to find a specific character in a string without using square brackets or integer variables. The original code successfully returns a pointer to the character if found, while the proposed rewrite encounters issues, such as getting stuck in a loop by not incrementing the pointer. Participants clarify that using "while (*s)" is sufficient to check for the end of the string, as it evaluates to false when reaching the null terminator. There is also confusion about returning the pointer, with reminders that 's' is already a pointer. Overall, the conversation emphasizes the importance of proper pointer manipulation in the function rewrite.
magnifik
Messages
350
Reaction score
0
I have an original code that searches through "s" for a specific character then stores this into a pointer (otherwise, null). This is the original code:
Code:
const char* findMe(const char s[], char c)
    {
        for (int k = 0; s[k] != 0; k++)
            if (s[k] == c)
                return &s[k];

        return NULL;
    }

I need to rewrite it so it does the same thing but does NOT use any square brackets nor any integer variable. Here is what I have, but I am unsure of whether or not it is entirely correct;
Code:
const char* findMe(const char* s, char c)
   	 {
        while (*s != '\0')
		{
            if (*s == c)
                return &s;
		}
        return NULL;
  	  }
 
Physics news on Phys.org
You don't need "while (*s != '\0')" just use " while (*s)"
You don't increment s you you are only checking the first character - it will get stuck in a loop.
Do you mean to return &s? remember S is already a pointer
 
Why not copy the control structure of the first example? IOW, use a for loop instead of switching to a while loop.

If s is declared as an array of char like this (the 30 is not relevant) -
char s[30];

- you can access the character at index n by array notation (s[n]) or by pointer notation ( *(s + n) ).
 
mgb_phys said:
You don't need "while (*s != '\0')" just use " while (*s)"
You don't increment s you you are only checking the first character - it will get stuck in a loop.
Do you mean to return &s? remember S is already a pointer

i am trying to read in the whole thing, not just the first character... why is it that you only need *s and not *s != '\0'?? i thought you needed that to ensure that it gets to the zero byte/the end of the string
 
The two expressions are equivalent.
while (*s) - means "while *s is any character other than '0'
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 24 ·
Replies
24
Views
3K
  • · Replies 7 ·
Replies
7
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 21 ·
Replies
21
Views
4K
  • · Replies 12 ·
Replies
12
Views
3K
  • · Replies 8 ·
Replies
8
Views
7K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K