一个简单有趣的C语言自打印程序print-me.c

SAP PO打印预览全攻略:从ME23N到Message Type配置的完整流程 本文详细解析了SAP PO打印预览功能的全流程配置,从ME23N操作到Message Type的深度设置,涵盖驱动程序与Form程序的开发实战。通过核心概念解析、标准操作流程及高级应用场景,帮助用户高效解决打印预览中的常见问题,提升业务处理效率。 阅读详情

所谓的自打印程序是指这样一个程序A:当A编译运行后,其运行结果就是将A程序的源代码输出出来。

乍看这个问题,很容易直接想到的方法就是通过读文件的方法将其源代码打印出来。但是如果限定仅仅用C的printf函数,不用其他的函数,该如何处理呢?

下面是一个C语言的实现,print-me.c的源程序如下:

int main(){char *me="int main(){char *me=%c%s%c;printf(me,34,me,34);}";printf(me,34,me,34);}

编译运行如下:

[root@jocks asm80]# gcc print-me.c -o print-me

[root@jocks asm80]# ./print-me

int main(){char *me="int main(){char *me=%c%s%c;printf(me,34,me,34);}";printf(me,34,me,34);}

简单说明:

34即是双引号”的ASCII的十进制表示。

程序的主体就是最后的printf(me,34,me,34);语句,其第一个参数me是格式化输出的控制串。随后的

34,me,34

是要输出的三个参数,两个34在格式串me的%c的位置输出两个双引号”,中间的me为在%s的位置输出

整个me字符串。理解了printf输出时的参数扩展的过程就基本理解了这个自打印程序的意义了,关于printf(me,34,me,34);的参数扩展用下图说明就一目了然了:

--本文结束--


c语言有趣的100个例子代码 c语言有趣的100个例子代码,一定要看呀。 立即下载

相关推荐

手眼标定搞定了,手眼矩阵不知道怎么用?快戳!!

手眼标定得到手眼矩阵到底该咋用? 大家好,我是小鱼。上几期给大家分享了关于手眼标定的方法,如果还有不清楚如何让进行手眼标定的同学可以参考下面的文章: 机器人手眼标定都能搞不定?快戳,最好用的手眼标定库!!! 很多同学做完了手眼标定之后得到了手眼矩阵,但是不知道怎么用于程序当中去,还有很多同学搞不清楚各个坐标系之间的关系,今天小智就给大家讲讲手眼矩阵的使用问题。 一、手眼矩阵为什么会长的不一样? 做完手眼标定,得到的手眼矩阵,有可能会长的不一样,这是因为旋转变换是有很多种表示方法的。 1.旋转的表

生活不止眼前的苟且 5342

自己打印自己的C程序代码

题目的意思是: #include #include extern char * _binary_test_c_start; int main() { printf("%s", (char *)&_binary_test_c_start); }

Kevin的逆袭博客 2292

UM2 3D 打印机 DIY 实践 (2) 电路篇

涉及到的东西非常多,实际上后面还会讲到。主要部件清单: 主板 mega2560 + Ramps1.4 + LCD12864 各一张 42 x38mm x3,xyz 轴各一台 42 x23mm x1,用在挤出机 泰坦远程挤出机 x1 TMC2225 驱动板 x4, 替代a4988、TMC2208,静音效果好,性价比高 s-250-12v 20A开关电源 x1。功率必须足够大,宁可选大一点的 大功率 MOS 管,25A x1 NTC .

afeiqiang的专栏 3601

自我打印的C程序

main(){char* a="main(){char* a=%c%s%c;printf(a,34,a,34);}";printf(a,34,a,34);}运行结果是打印源代码本身注:ASCII的34是"

AMin2001的专栏 2281

Mac用户看过来!M1/M2芯片安装CiteSpace完整指南(从Homebrew到成功运行)

本文为Mac M1/M2芯片用户提供CiteSpace安装的完整指南,从Homebrew安装适配的Java环境到最终成功运行CiteSpace。详细步骤包括环境检查、Java配置、CiteSpace下载与优化,解决常见问题如内存分配、图形渲染和中文显示乱码,确保科研人员能顺利使用这一文献可视化工具。

weixin_42530458的博客 304

mtk-drm初始化

mtk-drm初始化走读

zhexingsunba的博客 4931

【有趣的发现】 —— 打印自身源程序

最近看“找规律的打印表”问题,就无意间看到了这个“打印自身源程序”问题,不禁感叹有时候代码真的神奇呀,学的越多就觉得自己知道的越少~ 作为真正的 quine ,有一些约定:程序不能接受输入或者是打开文件,因为那样就可以直接输入源代码或者是把源代码文件直接打开再重新打印出来,就没有什么意思了;同时,一个完全空白的程序(产生完全空白的输出,即没有输出)也并不能称作 quine 。 起始,我们可以先不要要求那么高,先上前菜,开开胃~ cmd指令输出源程序 首先找到自己的程序,右键点击“属性”,复制“位置” 点

❀雾里看花花里看雾❀ 854

手把手教你配置MAX96712解串器:从I2C地址分配到PWM帧同步

本文详细解析了MAX96712解串器在自动驾驶视觉链路中的核心配置流程。从I2C地址分配、GMSL2数据流映射到实现多摄像头精准同步的PWM帧同步触发,手把手指导工程师构建高可靠性的图像传输系统,并提供了实用的Linux调试技巧与问题排查思路。

weixin_29297127的博客 921

自打印算法

自打印问题描述:   自打印是指在程序中不读取任何额外的信息,仅使用程序代码中携带的功能和信息,将程序代码本身打印输出。 在阅读下面的部分之前, 我强烈的建议你自己先想一下这个问题,然后试着去实现一下。 自打印算法原理:   一个完整的自打印程序通常至少包括两部分:“描述部分”和“执行部分”。在“描述部分”,用字符串变量来存储“执行部分”的代码。而“执行部分”的代码则打印这个字...

weixin_30566149的博客 151

Cesium功能集(十二):Cesium中流体仿真

【代码】Cesium功能集(十二):Cesium中流体仿真。

GIS肆月 601

Python爬虫实战:基于Scrapy与Playwright高效爬取人民网新闻数据

本文将详细介绍如何使用Python最新技术栈(Scrapy框架结合Playwright浏览器自动化工具)高效爬取人民网新闻数据。文章包含完整项目搭建、反反爬策略、数据解析存储以及性能优化等核心内容,提供可直接运行的代码示例,适合中高级Python开发者学习现代网络爬虫开发技术。python# 去除特殊空白字符。

2201_76125261的博客 1118

打印自身的程序

闲来没事,想起还有这样一个玩意,所以就做了,不知道符合要求不-,-记得以前有个很短的,不过无法通过编译=。=// File Name : print_self.cpp// Author : keakon// Create Date : 2006/5/27// Last Edited Date : 2006/5/28// Description : Print its own sou

风笑雪的专栏 1200

C# 与蓝牙 BLE 设备通信:基于 Windows.Devices.Bluetooth 实现手环/传感器数据读取

本文介绍了如何利用C#的Windows.Devices.Bluetooth命名空间实现与蓝牙BLE设备的通信。首先概述了BLE技术特性及其在物联网中的应用场景,包括智能穿戴设备和传感器。随后讲解了BLE的GATT协议架构,解析了服务(Service)和特性(Characteristic)的概念。文章重点展示了通过C#实现设备扫描、连接、数据读取的完整代码示例,并详细说明了如何使用通知(Notifications)功能实现实时数据更新。最后提供了订阅心率测量特性变化的实现代码,为开发者提供了完整的BLE设备通

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1323

C语言刷题(22):指针数组,将英文书籍名称排序,每一个指针数组中保存一个字符串

// #include <stdio.h> #include <string.h> void main() { void sort(char * name[],int n); void print(char * name[],int n); char * name[]={"Follow me","BASIC","The Great Wall","FO...

qq_1316238389的博客 908

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

php print r用法,php中echo(),print(),print_r()用法

从我对echo(),print(),print_r()这个函数的理解是echo可输入字符串变量常量,print与echo差不多,但print_r可以打印数组而前两者是不可以的,下面我来详细介绍它们三个的用法与区别吧。echo是PHP语句,print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)print() 只能打印出简单类型变量的值(如int,string)print_r...

weixin_39860064的博客 538

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

在C中如何把print出的文字,紀錄在一個文件中

方法一:#includemain(){  FILE *fp;  int i=0;  char *s="Am I right?";  fp=fopen("c://text.txt","wr");  while(*s)  { printf("%c",*s);    fseek(fp,i++,SEEK_SET);    fprintf(fp,"%c",*s++);  }  fclose(fp);  ge

1037

PHP中echo(),print(),print_r()的区别是什么?

四种方法都可以输出字符串。 echo print() printf() print_r() 1 echo 可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。 语法正确: echo "Hello", "World"; 语法错误: echo ("Hello"

sxty0220 博客之家 2256

【C语言】用指针数组完成:将若干字符串安字母顺序输出

//用指针数组完成:将若干字符串安字母顺序输出 #include #include void print(char * name[],int n) //char * name[],指针数组,每个数组元素是一个char*(即字符串)类型 { int i; for(i=0;i<n;i++) { printf("%s\n",name[i]); } } void sort(char *

韩豆豆的博客 3046

c语言之宏预处理命令

以#开头,可以放在程序的任何地方 #中主要任务 1》文件包含: #include #include "file.h" 2>宏定义 #define name body 必须在一行中,否则会出现错误,可以使用延续符\,注意延续符与新行之间不能有空行,否则会导致错误 a》常量定义:#define NO 9其中宏体可以使任意类型 b》模拟函数: 1》无参#define FLUS

amao992的专栏 902

Interesting problems(1) - Write a program to print itself

Interesting problems(1) - Write a program to print itself The C implementation is as follows: #include<stdio.h>int main(){prin...

bangkuaique5427的博客 171

python小白的学习笔记《0.print()函数与变量》

** python小白的学习笔记 《0.print()函数与变量》 ** 第一次在这个集满各位编程大神的平台做这个文章,连做这个都有语法哈哈,太神奇了。本身专业和python没有关系,但是非常感兴趣,就来学学,下面是我的学习笔记。 0.python简介 Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。 Python的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通

maria python小白 352

php r echo_PHP中echo(),print(),print_r()的区别是什么?

四种方法可以输出字符串。 echoprint()printf()print_r()echo可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。语法正确: echo "Hello", "World";语法错误: echo ("Hello", "World");print()函数print()打印一个...

weixin_36453621的博客 227

php中echo(),print(),print_r()用法

php中echo(),print(),print_r()用法 原文 php中echo(),print(),print_r()用法 从我对echo(),print(),print_r()这个函数的理解是echo可输入字符串变量常量,print与echo差不多,但print_r可以打印数组而前两者是不可以的,下面我来详细介绍它们三个的用法与区别吧...

weixin_30588827的博客 113

char un 数组printf_printf()的打印整个数组

Let's assume I have the following code in my C program:#include void PrintSomeMessage( char *p );int main(int argc, char *argv[]) {char arr[10] = "hello";PrintSomeMessage(&arr[0]);return 0;}void P...

weixin_39999730的博客 569
上一篇: linux-0.01 boot.s 改编成适合 NASM 语法
下一篇: 3行代码为何能求得二进制数中1比特的个数
jocks
博客等级 码龄18年 15粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值