1

文字配列に文字列を格納すると(ヌル終端を使用)、後で文字列を操作できることを読みました(文字列リテラルへのポインターを持つ場合とは異なります)。

#include <stdio.h>
int main()
{
   char s[10]="Stack";
   s[9]='a'; // a gets stored in array and if index is less than 6 string gets changed
   printf("%s\n",s);    
   return 0; 
}

出力:スタック

これは、操作するインデックスが文字列の長さよりも短い限り機能します。

つまり、空のスペースがあっても文字列の内容 (したがってサイズ) を変更できないということですか?

目的の位置に「a」を追加する直接的な方法(関数を使用しない)はありますか?

4

6 に答える 6

6

printfNUL ターミネータの前の文字列の文字のみを出力します。 を設定すると、 ss[9]='a';の内容は次のようになります。

{'S', 't', 'a', 'c', 'k', '\0', '\0', '\0', '\0', 'a'}

印刷するs[9]と、そこにあります:

printf("%c", s[9]);

std::stringを見てください。

于 2013-09-08T07:10:56.243 に答える
3

「それは、空のスペースがあっても、文字列の内容 (したがってサイズ) を変更できないということですか?」文字列の内容 (個々の文字) を変更することはできますが、配列内のストレージ サイズ (要素の数、この場合は文字数) を変更することはできません。配列 (この場合は s) を定義すると、C はその配列に多くのストレージ スペースを割り当てるため、その割り当てられたスペースの外側にあるメモリについて想定することはできません。

「目的の位置に 'a' を追加する (関数を使用しない) 直接的な方法はありますか?」. はい、直接割り当てます。制約は、ストレージ スペースを超えないようにすることです (NUL char を除く)。たとえば、「s[2]='u';」を簡単に実行できます。出力は「スタック」ではなく「スタック」になります。

于 2013-09-08T07:11:07.590 に答える
3

いつでも'a'その場所に and を追加できますが、文字列を出力するために使用される関数は異なる必要があります。printf文字に遭遇した後、印刷を停止します'\0'。このような関数を使用できます

for (i = 0; i < len_of_str; i++)
{
    if (str[i] == '\0')
         continue;
    printf("%c", str[i]);
}
于 2013-09-08T07:09:31.410 に答える
2

"stack" が s[10] に設定された後、s[0]='s'、s[1]=[t]...s[4]='k'、s[5]='\0' . C および C++ では、char 配列が文字列形式として出力される場合、文字列の長さは、配列に割り当てられたメモリの量に関係なく、'\0' のインデックスと等しくなります。

于 2013-09-08T07:11:36.793 に答える
1

コードを少し変更しましたが、正常に動作しています。

   #include<stdio.h>
  using namespace std;
  int main()
  {
    char s[10]="Stack";
    s[8]='a'; // a gets stored in array and if index is less than 6 string gets changed
    s[5]='n';
    s[9]='\0';
    printf("%s\n",s);
    return 0;
 }

出力: stackn //'\0' 文字が印刷されない 最初に s[5] の位置にあるヌル文字 '\0' を取り出し、配列 s に文字を挿入できるように文字に置き換えます

次に、s[10] は 0 ~ 9 を意味するため、コード s[9]='a' を s[8]='a' に置き換えます。文字列を出力するには、s[9]='\ に null 文字を書き込む必要があるためです。ん。

于 2013-09-08T07:17:15.767 に答える
1

簡単な答えは「いいえ」です。単純に文字の配列のサイズを変更することはできません

arr[size+1] = 'a';

同じ方法で整数の配列のサイズを変更できないためです。ただし、関数を使用して動的文字列を使用し、char *メモリを割り当てることができますmalloc

于 2013-09-08T07:11:49.287 に答える