1

オンラインでどこでも見られる部分文字列を作成したいのですが、それは理にかなっています。ただし、文字の通常の配列に出力する代わりに、部分文字列を char* 配列として出力する方法はありますか?

これは私のコードのアイデアです:

char *str = "ABCDEF";
char *subStr = calloc(3, sizeof(char));
memcpy(subStr, &str[3], 3);
fprintf(log, "Substring: %s", subStr);

これでDEFが出力されることを願っています。私が何をすべきか、またはこれがうまくいくかどうか、あなたがどう思うか教えてください。ありがとう!

4

3 に答える 3

2

3要素のchar配列のみを割り当てるため、コードはCサブストリングを作成しませんが、ヌル終了文字には4番目の配列も必要です。

char *str = "ABCDEF";
char *subStr = calloc(4, sizeof(char));
memcpy(subStr, &str[3], 3);

またはそれ以下の費用

char *str = "ABCDEF";
char *subStr = malloc(4);
memcpy(subStr, &str[3], 3);
substr[3] = 0;

割り当ての結果が成功したかどうかも確認する必要があります。

char *str = "ABCDEF";
char *subStr = calloc(4, sizeof(char));
if(subStr) memcpy(subStr, &str[3], 3);
于 2021-04-25T23:14:37.350 に答える
0

終端のヌル文字を追加して、文字列を終了する必要があります。

const char *str = "ABCDEF"; /* use const char* for constant string */
char *subStr = calloc(3 + 1, sizeof(char)); /* allocate one more element */
memcpy(subStr, &str[3], 3);
fprintf(log, "Substring: %s", subStr);

calloc()バッファをゼロクリアするため、明示的な終了ヌル文字はここに書き込まれません。

于 2021-04-25T22:56:27.560 に答える