【问题标题】:C Programming. How to make method to print a stringC 编程。如何制作打印字符串的方法
【发布时间】:2009-09-12 02:25:05
【问题描述】:

我正在尝试在 C 中创建一个函数,该函数将打印一个作为参数的字符串。这在 C 语言中是否可行?

我的头文件中有类似的内容,但字符串不是有效的标识符。我知道 C 中没有字符串,但是 string.h 类是干什么用的?

#include <string.h>    

#ifndef _NEWMAIN_H
#define _NEWMAIN_H

#ifdef __cplusplus
extern "C" {
#endif

    void print (string message){  //this is where i need help
        printf("%s", message);
    }


#ifdef __cplusplus
}
#endif

#endif /* _NEWMAIN_H */

【问题讨论】:

  • 谢谢大家。我学到了一些新东西。

标签: c string


【解决方案1】:

在 C 中,没有原生的 string 类型。

C 将字符串处理为以 null 结尾的 char 数组。

例如:

char* string = "this is a string";

string.h 用于对类型为 char* 的 C 字符串执行字符串操作函数。

使用printf 打印字符串时,将传入char* 的变量:

char* string_to_print = "Hello";
printf("%s", string_to_print);

有关 C 中字符串的更多信息,Wikipedia page on C strings 将是一个好的开始。

【讨论】:

  • 我认为大多数 C 编译器让你摆脱指向字符串文字的非 const 指针,但“这是一个字符串”确实是 const 并且应该由 const char * 指向。
【解决方案2】:
void print (const char* message) {
            printf("%s", message);
}

【讨论】:

    【解决方案3】:

    简单考虑一下,对于你的家庭作业,即替换printf,你会想要使用char *,正如其他人指出的那样,并使用fwrite到stdout。

    对于相关问题,您可以查看 C/C++ best way to send a number of bytes to stdout

    【讨论】:

      【解决方案4】:

      C 中没有字符串,因为 C 中没有类。string.h 提供了在 C 中处理字符串文本操作的例程,使用指向 char 的指针。

      你会想要这样重写:

      void print(const char* message) {
          printf(message); // You don't need the formatting, since you're only passing through the string
      }
      

      话虽如此,这与直接调用 printf 并没有什么不同。

      【讨论】:

      • 您应该始终使用格式化,即使它只是“%s”。如果您要打印的字符串是“%s”,那么您就有问题了。
      • @Craig 仅当您从不可靠的来源(例如用户或外部)打印字符串时,打印您自己的不带格式的字符串是安全的。教条是不好的——你需要知道为什么。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      相关资源
      最近更新 更多