私のCの新しさを許してください!引数として2つのchar配列を受け取り、いくつかのJSONを返す関数を作成しようとしています。ここに私のコード、コンパイルの警告が続きます。このプログラムは、実行時に単に重複します。 2つの文字列を受け入れるC関数の文字列を返します
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char get_json(char *sid, char *obuf)
{
char *json;
json = malloc(strlen(obuf)+37);
strcpy(json, "{\"sessionline\":{\"sid\":\"");
strcat(json, sid);
strcat(json, "\",\"line\":\"");
strcat(json, obuf);
strcat(json, "\"}}");
return json;
}
int main()
{
char *sid = "xyzxyzxyz";
char *obuf = "asdfasdfasdfasdf";
char *json = get_json(sid, obuf);
printf(json);
}
gccでコンパイルする:あなたはcharとしてのchar *を返すされている
test.c: In function ‘get_json’:
test.c:14:9: warning: return makes integer from pointer without a cast [enabled by default]
return json;
^
test.c: In function ‘main’:
test.c:21:22: warning: initialization makes pointer from integer without a cast [enabled by default]
char *json = get_json(sid, obuf);
^
test.c:22:9: warning: format not a string literal and no format arguments [-Wformat-security]
printf(json);
^
あなたは関数の戻り値の型では、 '*'忘れてしまったが。 – xinaiz
sprintf()を使用すると、これらの機能をすべて簡略化できます。 – nosbor
タイプミスのようです。 'char get_json(char * sid、char * obuf)'は 'char * get_json(char * sid、char * obuf)'でなければなりません。戻り値の型の '*'に注意してください。 – NathanOliver