次のようなC文字列ポインターを取得するにはどうすればよいですか
char *a = "asdf";
となるように変更します。
char *a = "\nasdf\n";
文字列リテラルを変更することはできないため、その新しい形式で 2 番目の文字列を作成する必要があります。
または、書式設定が表示のみの場合は、表示時に書式設定を適用するだけで、新しい文字列の作成を保留できます。例えば:
printf("\n%s\n", a);
これがあなたが探していたものかどうかはわかりませんが、文字列を連結したいようです: How do I concatenate const/literal strings in C?
最初と最後の文字列として "\n" を使用し、2 番目の文字列として指定された文字列を使用します。
文字列リテラルへのポインターを使用している場合は、これを行うことはできません。その理由は、文字列リテラルが定数であり、変更できないためです。
あなたができることは、余分な文字を収容するのに十分なスペースを持つ配列を宣言することです。
char a[16] = "asdf";
次にmemmove
、文字列を移動したり、新しい文字を手動で追加したりできます。
size_t length = strlen(a);
memmove(&a[1], a, length + 1); /* +1 to include the terminating '\0' */
a[0] = '\n'; /* Add leading newline */
a[length + 1] = '\n'; /* Add trailing newline */
a[length + 2] = '\0'; /* Add terminator */
char* a = "asdf";
char* aNew = new char[strlen(a) + 2]; //Allocate memory for the modified string
aNew[0] = '\n'; //Prepend the newline character
for(int i = 1; i < strlen(a) + 1; i++) { //Copy info over to the new string
aNew[i] = a[i - 1];
}
aNew[strlen(a) + 1] = '\n'; //Append the newline character
a = aNew; //Have a point to the modified string
これがあなたが探していたものであることを願っています。メモリリークを防ぐために、作業が終了したら「delete [] aNew」を呼び出すことを忘れないでください。