【问题标题】:printing c string pointer打印c字符串指针
【发布时间】:2023-03-15 01:38:01
【问题描述】:

我在打印/显示 char *string 时遇到问题

这是我的字符串

    char *messageForServer = ("netsvr type0 dobrien %s- %s",inet_ntoa(clientAddr.sin_addr),port);

当我去打印它像

printf("%s\n",messageForServer);

它只会打印字符串的port 部分。 将非常感谢任何帮助,因为它困扰了我几个小时,似乎找不到答案

【问题讨论】:

  • 你期待什么样的魔法?
  • 你到底想做什么......你能解释一下吗
  • 也许你应该展示一些示例输出,并解释这与你想要的有什么不同..

标签: c string


【解决方案1】:

你应该这样做:

char messageForServer[100];
sprintf(messageForServer, "netsvr type0 dobrien %s- %s", "something", "8080");
printf("%s\n", messageForServer);

UPD:打印以下内容

netsvr type0 dobrien something- 8080

您的代码不起作用的原因是 - 好吧,您尝试获取格式化字符串的方式与 C 中的字符串格式化无关。有关更多信息,请参阅Creating C formatted strings (not printing them)

【讨论】:

  • 谢谢你完美解决了我的问题
【解决方案2】:

我认为您在这里尝试做的是提供一个可重用的函数,以便在代码的各个点打印“服务器消息”。您可能会考虑这样做:定义一个 messageForServer() 函数,而不是尝试使用预先格式化的字符串。

void messageForServer(char *msg, char *code)
{
    printf("netsvr type0 dobrien %s - %s\n", msg, code);
}

简单。干净的。可重复使用。

【讨论】:

    【解决方案3】:

    在 C 中,可以通过分配字符串文字来创建和初始化 char *

    char *string = {"some text here"};  
    

    它不会理解你尝试的初始化器,

    ("netsvr type0 dobrien %s- %s",inet_ntoa(clientAddr.sin_addr),port);  
    

    至少有两个原因:1) 因为它包含多个文字字符串,以及 2)( ) 封装在语法上是错误的(使用 @987654325 @ 反而)。

    如果您想创建一个包含多个简单文本(即字符串文字)的字符串,例如一个由两个字符串组成的字符串,一个整数和一个浮点数,您可以这样做:

    字符字符串[NUM_CHAR];

    sprintf(string, "%s %d %s %f", "Example of string with ", 4, "elements, including the float:", 3.15); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 2019-06-08
      • 2013-03-09
      • 2011-09-17
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多