2

私は文字列の基本的なプログラムを作成していて、これを行いました。このように文字列があります:

#include<stdio.h>
int main()
{
    char str[7]="network";
    printf("%s",str);
    return 0;
}

それは印刷しnetworkます。私の見解では、ネットワークを印刷すべきではありません。'\0'はこの文字配列を終了しないため、ガベージ値を出力する必要があります。では、どのように印刷されたのでしょうか。警告やエラーもありませんでした。

4

4 に答える 4

3

その理由は

char str[7]="network";

と同じです

char str[7]={'n','e','t','w','o','r','k'};

strは有効なchar配列ですが、null で終了していないため、文字列ではありません。したがって%s、印刷に使用するのは未定義の動作です。

参照: C FAQ: Is char a[3] = "abc"; 法的?どういう意味ですか?

于 2013-10-03T09:02:53.000 に答える
3
char str[7]="network"; 

これは呼び出しUndefined behaviorます。

十分なスペースのある配列を宣言していません

これは

char str[8]="network";  
于 2013-10-03T09:03:19.563 に答える
0

システムでスタック ページが完全にゼロから始まる可能性があるため、文字列は実際にはメモリ内で null で終了しますが、コードのおかげではありません。

デバッガーを使用してメモリ内のプログラムを調べたり、プラットフォームのドキュメントを読んだり、内容を印刷してstr[7]手がかりを得たりしてみてください。そうすることで未定義の動作が呼び出されますが、特定のコンパイラと OS が特定の時点で何をしているのかを把握しようとしている場合は関係ありません。

于 2013-10-03T09:36:31.050 に答える
0
char str[7]="network";

文字列に十分なスペースがありませんでした

char str[8]="network";
于 2013-10-03T09:09:33.973 に答える