gcc 4.4.4 c89
I was just experimenting with a int array. And something just came to my mind. Can I nul terminate it. For example, I am using a 0 to nul terminate. However, 0 could well be a valid value in this array.
The code below will terminate after the 5. Even though I mean 0 to be a valid number. However, I could specify the size of the array. But in this case, I don’t want to this as I am just interested in this particular problem.
Many thanks for any advice,
#include <stdio.h>
static void test(int *p);
int main(void)
{
int arr[] = {30, 450, 14, 5, 0, 10, '\0'};
test(arr);
return 0;
}
static void test(int *p)
{
while(*p) {
printf("Array values [ %d ]\n", *p++);
}
}
In short, no. Technically nul characters are equally valid in strings too, it’s just a convention that we use them for marking the end of a string, and all the standard library functions expect that. There are “double nul-terminated” strings that end in
\0\0for cases where a string needs to contain a\0, but then of course you have the problem of not being able to store\0\0in the string.If you don’t want to store an array’s size separately (or use trickery like
sizeof), you need to come up with a sentinel that can be stored in that type but you know won’t be part of the array; you could use45as long as you’re surearrwon’t have that as a valid value, it just needs to be unique