打印字符串有许多限制

时间:2015-07-24 15:49:33

标签: c string pointers memory memory-management

昨天,当讲师要我确认我是否熟悉时 指针,我告诉他我完全熟悉,这对我来说似乎很容易。

然而,我认为我犯了一个可怕的错误,因为那时他给我分配了打印的任务"我非常卑鄙"使用所有标准数据类型(没有声明指针)和printf只有一个参数,没有类型转换,字符文字,算术或循环。 他说,程序员学习如何以这种方式适应极其有限/几乎不可能的情况。 从那以后我所有的努力都导致了死胡同。

我甚至不是程序员。

2 个答案:

答案 0 :(得分:2)

你的讲师似乎非常残忍。不是因为任务,而是因为他想要的短语 你打印。

假设问题是“如何在没有实际打印字符串的情况下打印字符串”,那么我的问题可能有效。

无论如何,在这种情况下你需要做的第一件事就是完全理解这个任务。 如果你这样做......你会注意到他想要你打印的短语的大小是 保证大小为sizeof(char) + sizeof(short) + sizeof(int) + sizeof(long long)(特别是在x64位架构上) 那是1 + 2 + 4 + 8 .. 15。 因此,他可能希望您使用一个结构,以便将这些结构打包并为字符串提供足够的空间,而无需手动分配。

#include <stdio.h>
#include <string.h>

#define phrase "I am very ignoble"

struct DATATYPES
{
    unsigned char      first;  // I
    unsigned short     second; // am
    size_t             third;  // very
    unsigned long long fourth; // ignoble\0
} datatypes;

int main (void)
{
    memmove(&datatypes, phrase, sizeof(phrase));

    printf("%s", &datatypes);

    return(0);
}

使用minGW编译器编译-Wall -Wextra -pedantic 0错误,0警告 定义明确的行为,相对安全

答案 1 :(得分:0)

简单方法:

printf( "I am very ignoble\n" );

没有指针,没有数组,没有什么