strcat C不打印,int为char*

Pat*_*erí 0 c casting strcat

我首先尝试生成一个随机数并将其转换为字符串.它做得很好,但编译器给出了"警告:从不同大小的整数转换为指针".然后,这里的主要问题是我正在尝试连接字符串以构建响应,但由于某种原因,甚至第一个strcat都没有工作,它只是停在那里.

char *name, *cseq;
srand (time(NULL));
char *session = (char*) ( rand() % (9999 - 1000 + 1) + 1000 );

char* response = "RTSP/1.0 200 OK\nCSeq: ";                     
strcat( response, cseq );                   
strcat ( response, "\n" );                      
strcat ( response, "Session " );
strcat ( response, session );                       
strcat ( response, "\n\n" );

printf("Response: %s", response);
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 8

不,它没有"正确"地做到; 你的代码非常破碎.编译器在发出警告时并不是很有趣,他们通常知道他们在说什么,而是需要弄清楚你的代码有什么问题导致它触发警告.因为应该没有.

在您的情况下,此代码例如:

char *session = (char*) ( rand() % (9999 - 1000 + 1) + 1000 );
Run Code Online (Sandbox Code Playgroud)

无效,并且使用session好像它指向有效字符串很可能会调用未定义的行为.

您不能将事物"转换"为C中的字符串,除非它们是以0开头的字节数组,用于描述预期编码中的字符.

您需要使用eg 或类似的东西从随机数创建字符串sprintf():

const int session_id = rand() % (9999 - 1000 + 1) + 1000;
char session[32];

snprintf(session, sizeof session, "%d", session_id);
Run Code Online (Sandbox Code Playgroud)

当然,一旦你开始使用snprintf()你也可以将它用于所有的格式化,并删除strcat()这是一个非常锋利的工具.

另外,正如simonc所指出的那样,你不能修改像你一样的字符串.你应该有类似的东西:

char response[512];

snprintf(response, sizeof response, "RTSP/1.0 200 OK\nCSeq: %s\nSession %d\n\n",
         cseq, session_id);
printf("Response: '%s'", response);
Run Code Online (Sandbox Code Playgroud)

请注意,这session_id从上面使用,但在一次调用中执行所有格式化snprintf(),因此不需要会话ID的临时字符串版本.

当然,如果你想要return这个函数,你需要考虑缓冲区管理,你不能response按原样返回,因为它是一个局部变量,当函数退出时它将超出范围.