如何在不使用C语言标准库的情况下显示字符串值?

如何在不使用C语言标准库的情况下显示字符串值?,c,C,如何在不使用C语言标准库的情况下显示字符串值?请参阅以下代码: //without using the standard libraries that other created it int main() { string str = "Hello"; //How do I can display str value without using the standard libraries that other created it? } 以下是您如何做到这一点: // Declare th

如何在不使用C语言标准库的情况下显示字符串值?请参阅以下代码:

//without using the standard libraries that other created it
int main() {
string str = "Hello";
//How do I can display str value without using the standard libraries that other created it?
}

以下是您如何做到这一点:

// Declare the prototype for the write() function,
// with unspecified parameters because why not.
extern long write();

int main(void) {
    char const *str = "Hello";

    // Retrieve the length
    unsigned long size = 0;
    while(str[size])
        ++size;

    // Write to stdout (fd 1)
    write(1, str, size);

    return 0;
}


当然,它是不可移植的,除了我从中提取声明的系统(这是一个Linux系统调用,在我从Coliru检索到的
unistd.h
中声明)之外,它可能无法在大多数系统上链接或触发UB。但是,这就是为什么我们首先要有标准库。

很简单,你不能,至少如果你希望你的代码是可移植的,你不能

几乎可以肯定,有一些方法可以在不使用标准库的情况下用C代码执行输出。但是,实现这一目标的方法在不同的系统之间会有很大的差异。例如,在UNIX系统上工作的解决方案几乎肯定不会在Windows上工作,反之亦然——除非该解决方案使用C标准库,它是为每个系统定制的

这就是标准库存在的原因。对于不支持标准库的独立(嵌入式)实现,您必须编写特定于系统的代码来执行任何I/O

如果您想知道如何在不使用标准库的情况下在特定系统上执行I/O,我建议发布一个新问题

int main() {
string str = "Hello";
}
intmain()
最好写成
intmain(void)

C中没有类型
string

const char *str = "Hello";

根据定义,C中的“字符串”是“由第一个空字符终止并包括该空字符的连续字符序列”。这是一种数据格式,而不是数据类型。(C++有一个类型<代码> STD::String ,但是你问的是C,不是C++ +而C++中的代码> STD::String 本身由C++标准库定义)
是一个很好的资源。

什么类型的
string
?如果不使用标准库,就不支持IO。因此,您希望避免使用stdio.h/stdlib.h?@RSahu中的
printf
或任何其他函数。在基于Linux的系统中,内核系统调用将为I/O提供便利(这也是标准库用于I/O的内容)。
write()
是OP所追求的。为什么要避免使用C标准库?是否可以接受C标准定义的库(例如POSIX)以外的库?了解原因会使您更容易给出有意义的答案。请注意
write()
(此处使用)是一个Linux内核系统调用。
1
表示
stdout
,通常是您的控制台/终端/屏幕。使用
fileno(stdout)可以更清楚
虽然大多数人都知道
1
是标准代码,但是如果你不
\include
@SnakeDoc是的,我忘了提到它是一个Linux系统调用。但是
fileno
stdout
都来自标准库,所以我不会使用它们。我解释了原因ed
write
我自己就是
unistd.h
为例如
size\u t
拉入标准头。虽然没有,它也可以编译。公平地说,我忘记了
fileno
stdout
在标准库中的位置!@KeithThompson是的,它是由POSIX指定的,但POSIX是一个规范,不是一个实现。在Linux中函数
int fileno(FILE*stream);
是在
stdio.h
(C标准库的一部分)中定义的。请参阅:@SnakeDoc好吧,我有一些投票,还有一个有趣的小挑战。对我来说都很好:)
char str[] = "Hello";