したがって、たとえば「0123456789」のC文字列は、実際には11文字の配列を占有し、本体に10文字、終端のnullに1つあると理解しています。それが本当なら、以下のコードが何らかのエラーを引き起こさないのはなぜですか?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char ** argv){
char * my_string = "0123456789";
/* my string should occupy 11 bytes */
int my_len = strlen(my_string);
/* however, strlen should only return 10,
because it does not count the null byte */
char * new_string = malloc(my_len);
/* allocate memory 10 bytes wide */
memcpy(new_string, my_string, my_len);
/* copy the first 10 bytes from my_string to new_string
new_string should NOT be null terminated if my understanding
is correct? */
printf("%s\n", new_string);
/* Since new_stirng is NOT null terminated it seems like this should
cause some sort of memory exception.
WHY DOES THIS NOT CAUSE AN ERROR?
*/
return 0;
}
null で終了していないため、他のアプリケーションのメモリに到達するか、ランダムに配置された 0x00 がクラッシュするか、何か奇妙なものを出力するまで、永遠に読み取るnew_string
ことが期待されます。printf
どうしたの?