#include <stdio.h>
// this works
void print_stuff (void* buf) {
printf ("passed arg as buf*: %s\n", buf);
}
/* This works */
void print_stuff_3 (char* buf) {
printf ("passed arg as char*: %s\n", buf);
}
// this does not work
void print_stuff_2 (char** buf) {
printf ("%s\n", *buf);
}
int main () {
char s [] = "hi";
printf ("s = %s\n", s);
// these work
print_stuff (&s);
print_stuff_3 (&s);
// this results in a Segfault
print_stuff_2(&s);
return 0;
}
I am a bit confused about the way things are passed around in C. I feel like &s
should be of type char**
, but it behaves as if it is of type char*
when passed to a function. Why does this behaviour happen?
In particular, print_stuff_2
segfaults, whereas I thought that print_stuff_3
would give an error.
EDIT: To clarify, I expected print_stuff(&s)
and print_stuff_3(&s)
to fail (while they succeed), while print_stuff_2(&s)
fails, whereas I feel it should succeed.