On 9 October 2012 13:47, Christophe Lyon <christophe.l...@linaro.org> wrote:
> [copy of my answer in your bug report]
>
> Hello,
>
> If you look at the assembly code generated by the compiler, you will see:
> foo_abc:
>  .ascii "12345"
>
> From the gas documentation:
> `.ascii' expects zero or more string literals (*note Strings::)
> separated by commas. It assembles each string (with no automatic
> trailing zero byte) into consecutive addresses.
>
> So, '\0' is NOT added at the end of the initializer.
>
> If you change your initialization to "123456", GCC prints a warning:
> warning: initializer-string for array of chars is too long [enabled by 
> default]
>  warning: (near initialization for 'foo_abc.array') [enabled by default]

Something new, At least for me :)
This means code like below can break anytime :(

char foo1[4] = "test";
char foo2[4];

void mystrcpy(char *src, char *dst)
{
        /* Well known strcpy implementation */
        while (*dst++ = *src++);
}

void main(void)
{
        mystrcpy(foo1, foo2);
        printf("src: %s and dst: %s\n", foo1, foo2);
}

As, nobody is guarantees that location next to foo1 is going to be '\0'?

--
viresh

_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to