‘壹’ c语言问题
/*------------------------mini_tool小工具系列 numconv.cc-----------------------
Name: numconv.cyx
描述: 数值转换小工具, 用于将标准输入的 "十六进制/十进制/二进制" 数值互为转换.
方便其他程序设计中的 "位状态" 考虑.
作者: 任逍 |2002.04.21.
版权: GNU General Public License (GPL)
------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
#include <limits.h>
#include <locale.h>
char bin_string[sizeof(long int) * 8 + 1];
void get_help(char* program_name);
void get_version(char* program_name);
char* puts_bin_string(char* bin_string, const long int value);
bool test_chars(char* parameter, int num_system);
int main(int argc, char** argv)
{
// 初步检测命令行参数.
if (argc == 1)
{
printf("Please try -h or --help for help!\n");
return 0;
}
if ( (! strcmp(argv[1], "-h")) || (! strcmp(argv[1], "--help")) )
{
get_help(argv[0]);
return 0;
}
if ( (! strcmp(argv[1], "-V")) || (! strcmp(argv[1], "--version")) )
{
get_version(argv[0]);
return 0;
}
// 检测初始化环境变量 "NUMCONV_IN" 和 "NUMCONV_OUT".
char* penv_in = NULL;
char* penv_out = NULL;
penv_in = getenv("NUMCONV_IN");
if ( (penv_in == NULL ) || (!strcmp(penv_in, "")) )
{
printf(" Please export NUNCONV_IN to environment!\n OR try -h/--help for help.\n");
return -1;
}
penv_out = getenv("NUMCONV_OUT");
if ( (penv_out == NULL ) || (!strcmp(penv_out, "")) )
{
printf(" Please export NUNCONV_OUT to environment!\n OR try -h/--help for help.\n");
return -1;
}
// 查看程序环境变量.
if ( (!strcmp(argv[1], "-s")) )
{
printf("NUMCONV_IN=\t%s\n", getenv("NUMCONV_IN"));
printf("NUMCONV_OUT=\t%s\n", getenv("NUMCONV_OUT"));
return 0;
}
// 按进制转换数据并显示(标准输出).
long int conv_value;
char* end_chars = NULL;
int conv_in = atoi(getenv("NUMCONV_IN"));
int conv_out = atoi(getenv("NUMCONV_OUT"));
for (int iB = 1; iB < argc; iB ++)
{
if (! test_chars(argv[iB], conv_in))
{
fprintf(stderr, "Invalid chars!\t-> %s\n", argv[iB]);
printf("xxx\n"); // 待转换字符串首字符即不合法. 打印 "xxx" 作标示.
continue;
}
if ( ((conv_value = strtol(argv[iB], &end_chars, conv_in) ) == LONG_MAX)
|| ((conv_value = strtol(argv[iB], &end_chars, conv_in) ) == LONG_MIN) )
{ // 数值字符串超出long类型范围, 打印 "???" 作标示.
fprintf(stderr, "Overflow or Underflow of:\t%s\n", argv[iB]);
printf("???\n");
continue;
}
if ( (end_chars != NULL) && (strcmp(end_chars, "")) )
{ // 在标准错误输出设备指出不能转换的非法字符.
fprintf(stderr, "Spare chars of string end!\t-> %s\n", end_chars);
end_chars = NULL;
}
switch (conv_out)
{ // 格式化显示转换后的数据.
case 0:
case 10:
printf("%d\n", conv_value);
break;
case 8:
printf("%#o\n", conv_value);
break;
case 16:
printf("%#x\n", conv_value);
break;
case 2:
printf("%s\n", puts_bin_string(bin_string, conv_value));
break;
default:
printf("Please set NUMCONV_OUT for correct.\n");
printf("Please tyt -h or --help for help!\n");
return -1;
}
}
return 0; // 数值转换结束.
}
// 程序使用帮助函数.
void get_help(char* pname)
{
printf("-----------------------------------------------------------------------------\n");
printf("Usage: %s [option] [number_chars ...]\n", pname);
printf("(用法: %s [选项] [待处理数据字符串...]\n", pname);
printf("\n描 述:\n");
printf(" 通过设定数据进制环境变量 \"NUMCONV_IN\" 和 \"NUMCONV_OUT\"转换从命令行传\n");
printf(" 入的数据字符串. 支持 \"二进制/八进制/十进制/十六进制\" 的任意互转.\n");
printf(" 转换后的数据送到标准输出.\n");
printf("\n选 项:\n");
printf(" -h|--help 显示此帮助列表.\n");
printf(" -V|--version 显示程序版本及相关说明.\n");
printf("\n注 意!\n");
printf(" 1. 使用前请先设定环境变量! 如\"export NUMCONV_IN=10\" ->设定输入数据为十\n");
printf(" 进制方式, \"export NUMCONV_OUT=16\" ->设定输出为十六进制.\n");
printf(" 2. 待处理数据字符串字符应是符合相应进制规定的字符, 如十六进制的a-f/A-F.\n");
printf(" 3. 程序可处理以空格/TAB分隔的多个数据字串(转换数据时无选项字符)\n");
printf(" 4. 在转换中碰到不能转换的非法字符, 程序打印已转换的数据, 并在标准错误输\n");
printf(" 出打印剩下的非法字串.\n");
printf(" 5. 若转换一开始就碰到非法字符, 程序打印 'xxxx' 字串以作标示, 并在标准错\n");
printf(" 误输出打印该字串.\n");
printf(" 6. 若碰到超出long数据类型范围的字串, 程序将其打印为 '???'.\n");
printf("\n错误反馈:\n");
printf(" 非常欢迎您的错误信息/报告反馈! 请将出现错误的前后情形描述得尽量详细些, \n");
printf(" 以方便本人的分析和判断, 解决您的问题(当然更是程序本身的问题!).\n");
printf(" 信息反馈地址: E-Mail: [email protected] 谢谢!\n");
printf("-----------------------------------------------------------------------------\n");
}
// 二进制字符串显示函数.
char* puts_bin_string(char* bin_string, const long int conv_value)
{ // 采用 "位检测" 循环赋值字符 '1' 或 '0'.
int tmp_length = (sizeof(long int) * 8);
long int tmp_value = conv_value;
for (int i3 = tmp_length - 1; i3 >= 0; i3 --)
{
if (tmp_value & 1)
bin_string[i3] = '1';
else
bin_string[i3] = '0';
tmp_value = tmp_value >> 1;
}
bin_string[tmp_length] = '\0';
return bin_string;
}
// 显示程序版本号及其版权等说明.
void get_version(char* name)
{
printf(" Name: %s\n", name);
printf(" Version: 0.1-0\n");
printf(" License: GNU General Public License (GPL)\n");
printf(" Author: ZhongHui-Huang of Chinese.\n");
printf(" TimeFrom: 2002.04.27.\n");
}
// 检测待转换字符串首字符(除'-'号外)是否合法. (包括 '0x?' 式的十六进制值)
bool test_chars(char* param, int num_system)
{
int test_char[3];
int choice = num_system;
if (!param || param[0] == '\0')
return false;
if (param[0] == '-')
{
if ( (test_char[0] = param[1]) != 0 )
if ( (test_char[1] = param[2]) != 0 )
if ( (test_char[2] = param[3]) != 0 )
;
}
else
{
if ( (test_char[0] = param[0]) != 0 )
if ( (test_char[1] = param[1]) != 0 )
if ( (test_char[2] = param[2]) != 0 )
;
}
switch (choice)
{
case 0:
if ( (isdigit(test_char[0]) && test_char[1] != 'x')
|| ( (test_char[0] == '0') && (test_char[1] == 'x')
&& isxdigit(test_char[2]) ) )
return true;
break;
case 2:
if ( (test_char[0] == '0') || (test_char[0] == '1') )
return true;
break;
case 8:
if ( isdigit(test_char[0]) && ( test_char[0] < '8' ) )
return true;
break;
case 10:
if ( isdigit(test_char[0]) )
return true;
break;
case 16:
if ( isxdigit(test_char[0]) )
return true;
break;
default:
break;
}
return false;
}
‘贰’ linux下c语言环境变量操作的几个相关函数
这几个函数的原型在<stdio.h>中定义
/* Return the value of envariable NAME, or NULL if it doesn't exist. */
extern char *getenv (__const char *__name) __THROW __nonnull ((1)) __wur;
/* The SVID says this is in <stdio.h>, but this seems a better place. */
/* Put STRING, which is of the form "NAME=VALUE", in the environment.
If there is no `=', remove NAME from the environment. */
extern int putenv (char *__string) __THROW __nonnull ((1));
/* Set NAME to VALUE in the environment.
If REPLACE is nonzero, overwrite an existing value. */
extern int setenv (__const char *__name, __const char *__value, int __replace)
__THROW __nonnull ((2));
/* Remove the variable NAME from the environment. */
extern int unsetenv (__const char *__name) __THROW __nonnull ((1));
‘叁’ getenv在shell脚本中怎么用
getenv是一个C语言的系统库函数,定义在头文件<stdlib.h>,在C编程时使用的,
输入参数为一个字符串,环境变量,返回的是环境变量的值,或者NULL(环境变量不存在的时候)
如果在shell脚本中想要获取当前的环境变量,则应该使用命令 env,可以列出当前的环境变量
得到形式如下面的输出:
‘肆’ 求C语言的常用函数,详细一点
C语言的常用库函数
函数1。absread()读磁盘绝对扇区函数
函数2。abswrite()写磁盘绝对扇区函数
函数3。atof()将字符串转换成浮点数的函数
函数4。atoi()将字符串转换成整型数的函数
函数5。atol()将字符串转换成长整型数的函数
函数6。bcd()把一个数转换成对应的BCD码的函数
函数7。bdos()
函数8。biosdisk()调用BIOS磁盘驱动程序函数
函数9。biosprint()调用BIOS打印机I/O接口的函数
函数10。calloc()分配内存函数
函数11。ceil()
函数12。cgets()读字符串函数
函数13。chdir()改变当前目录的函数
函数14。_chmod()改变文件存取权限的函数
函数15。chmod()改变文件存取权限的函数
函数16。clock()
函数17。close()关闭文件函数
函数18。closegraph()关闭图形函数
函数19。cos()
函数20。ctrlbrk()设置ctrl-break处理程序的函数
函数21。delay()暂停函数
函数22。disable()屏蔽中断的宏
函数23。enable()开硬件中断的宏
函数24。exec()加载并运行其它程序的函数族
函数25。farcalloc()从远堆中分配内存的函数
函数26。farfree()从远堆中释放一块已分配内存的函数
函数27。farmalloc()从远堆中分配内存的函数
函数28。farrealloc()调整远堆中已分配块的函数
函数29。fclose()关闭一个流函数
函数30。fcloseall()关闭打开的流的函数
函数31。feof()检查文件是否结束的函数
函数32。fgets()从流中读取一字符串的函数
函数33。findfirst()函数和findnext()函数
函数34。floodfill()填充区域的函数
函数35。floor()
函数36。fnmerge()建立文件路径函数
函数37。fnsplit()分解完整的路径名函数
函数38。fopen()打开一个流函数
函数39。FP_OFF()获取远地址偏移量的宏
函数40。fprintf()传送输出到一个流中的函数
函数41。FP_SEG()获取远地址段值的宏
函数42。fscanf()格式化输入函数
函数43。fseek()移动文件指针函数
函数44。fwrite()把参数写入流中的函数
函数45。gcvt()把双精度数转化成字符串的函数
函数46。geninterrupt()执行中断函数
函数47。getc()从流中取字符的宏
函数48。getch()从键盘无回显地读取一字符的函数
函数49。getchar()从stdin流中读取一个字符的函数
函数50。getcurdir()读取指定驱动器的当前目录的函数
函数61。getcwd()读取当前目录的函数
函数62。getdate()读取系统日期函数
函数63。getdfree()读取磁盘空闲空间的函数
函数64。getdisk()读取当前磁盘驱动器号函数
函数65。getenv()读取环境变量的当前值的函数
函数66。getimage()将指定区域的位图象存入内存的函数
函数67。getmaxx()返回屏幕上最大的X坐标值的函数
函数68。getmaxy()返回屏幕上最大的Y坐标值的函数
函数69。getpixel()读取像素颜色的函数
函数70。getpsp()
函数71。gets()从标准输入流stdio中读取一字符串的函数
函数72。gettime()读取系统时间的函数
函数73。getvect()读取中断向量函数
函数74。getx()返回当前图形方式下位置的X坐标值的函数
函数75。gety()返回当前图形方式下位置的Y坐标值的函数
函数76。imagesize()返回保存图像缓冲区大小的函数
函数77。initgraph()显示模式控制函数(初始化图形系统函数)
函数78。inport()从端口中读入一个字的函数
函数79。inportb()从端口读入一个字节的函数
函数80。int86()执行中断函数(调用8086软中断函数)
函数81。int86x()执行中断函数 (通用8086软中断接口函数)
函数82。intdos()通用dos中断接口函数
函数83。intdosx()通用dos中断接口函数
函数84。intr()执行8086软中断函数(改变软中断接口函数)
函数85。itoa()把整形数转换为字符串的函数
函数86。kbhit()检查当前按下的键的函数
函数87。keep()驻留并退出函数
函数88。log()
函数89。log10()
函数90。_lrotl()将一个无符号长整形数左循环移位的函数
函数91。_lrotr()将一个无符号长整形数右循环移位的函数
函数92。lseek()移动文件指针函数
函数93。ltoa()把长整形数转换为字符串的函数
函数94。malloc()分配内存函数
函数95。mkdir()创建目录函数
函数96。mktemp()建立一个唯一的文件名的函数
函数97。MK_FP()设置一个远指针的宏
函数98。movedata()拷贝数据函数
函数99。_open()打开一个文件进行读写的函数
函数100。open()打开文件进行读写的函数
函数101。outport()输出一个字到端口中的函数
函数102。outportb()输出一个字节到端口中的函数
函数103。outtextxy()在指定位置显示一字符串的函数
函数104。peek()返回指定内存中字的函数
函数105。peekb()返回指定内存中字节的函数
函数106。poke()在指定的内存中存储一个字的函数
函数107。pokeb()在指定的内存中存储一个字节的函数
函数108。pow()
函数109。printf()写格式化输出到stdout的函数
函数110。putch()向屏幕输出字符的函数
函数111。putchar()在stdout上输出字符的宏
函数112。putenv()将字符串放入当前环境中的函数
函数113。putimage()重新写屏函数(输出一个位图象到图形屏幕上的函数)
函数114。putpixel()写像素点函数
函数115。puts()输出一字符串到stdout(标准输出)的函数
函数116。_read()读文件函数
函数117。read()读文件函数
函数118。realloc()重新分配内存函数
函数119。rectangle()画一个矩形的函数
函数120。remove()删除一个文件的函数
函数121。rename()文件改名函数
函数122。restorecrtmode()恢复屏幕视频模式为调用initgraph前的设置的函数
函数123。rmdir()删除目录函数
函数124。_rotl()将一个无符号整形数左循环移位的函数
函数125。_rotr()将一个无符号整形数右循环移位的函数
函数126。scanf()格式化输入函数
函数127。searchpath()按dos路径查找一个文件的函数
函数128。segread()读段寄存器函数
函数129。setactivepage()设置图形输出活动页的函数
函数130。setcolor()设置当前要画的线颜色的函数
函数131。setdisk()设置当前驱动器的函数
函数132。setgraphmode()将系统设置成图形模式并清屏的函数
函数133。setlinestyle()设置当前画线宽度和类型的函数
函数134。settextstyle()显示字符的当前设置函数
函数135。setvect()设置中断向量函数
函数136。setviewport()建立视口的函数
函数137。setvisualpage()设置可见的图形页号的函数
函数138。sin()
函数139。sprintf()格式化输出到数组的函数
函数140。strcat()
函数141。tan()
函数142。_write()写文件函数
函数143。write()写文件函数
原文释义请到网络文库里搜寻字串“C语言常用函数”后下载
函数51-60因原注里排序号码少编,所以只有133个常用函数。
DOC大小是119.5KB
贡献时间:2010-09-10
贡献者:handanlinzhang
‘伍’ c语言怎么获得linux的home目录
可以利用getenv函数来实现。
在Linux系统中,home目录的定义是通过系统环境变量中的HOME变量值来确定的,在shell下可以通过
echo $HOME来查看。
而在C语言中,库函数getenv可以用作获取环境变量值。该函数位于stdlib.h, 原型为
char *getenv(char *name);
功能为获取名字为name的环境变量字符串。
所以,下面代码就可以获取到home目录名了:
char*home;
home=getenv("HOME");
printf("thehomepathis%s ",home);
‘陆’ linux C 编程,用 getenv 函数获取环境变量时,返回值为什么是整型的
指针使可以转换成整数的,你的什么版本的gcc?
我的gcc 版本 4.8.3 20140911 (Red Hat 4.8.3-7) (GCC)编译没有任何警告。
#include<stdio.h>
#include<stdlib.h>
intmain()
{
puts(getenv("HOME"));
char*user=getenv("USER");
puts(user);
return0;
}
‘柒’ 如何用C语言获取目录下的文件和目录列表
#include <stdio.h>
#include <stdlib.h>
void main()
{
system("DIR /D C:\\ /s /B > a.log");
}
C:\下的所有文件夹,子文件夹里所有文件,转向到 文本文件 a.log 里。
格式:
C:\aaa\bbb\ccc\...
只要文件夹命令:
dir /d c: /B /ad
只要文件夹命令,含子文件夹:
dir /d c: /B /ad /s
‘捌’ 如何设置C语言里的环境变量
C语言编译器本身需要环境变量支持,比如配置编译器可执行文件所在路径需要设置path环境变量等。
这时可以通过在命令行中调用操作系统对应设置环境变量的命令,实现设置。
a. 在windows/dos下,设置命令为set, 引用变量为%变量名%,于是设置path的可以写作set path=xxxx;%path%,这样就在path变量中增加了xxxx路径。
在C语言运行中,需要设置环境变量。这时可以使用system函数,调用系统命令来实现。
如
system("set my_env=env_string");
是在windows下增加一个my_env的环境变量,值为env_string。
而在linux下,该设置写作
system("export my_env=env_string");
(8)getenvc语言扩展阅读:
C语言中环境变量操作
getenv(取得环境变量内容)
相关函数 putenv,setenv,unsetenv
putenv(改变或增加环境变量)
setenv(改变或增加环境变量)
对环境变量操作
#include<stdlib.h>
main()
{
char * p;
if((p=getenv(“USER”)))
printf(“USER =%s ”,p);
setenv(“USER”,”test”,1);
printf(“USER=%s ”,getenv(“USEr”));
unsetenv(“USER”);
printf(“USER=%s ”,getenv(“USER”));
}
‘玖’ C语言如何生成UTF-8编码格式的文件
下面的Unix下函数可以会帮到你
getenv(取得环境变量内容)
相关函数 putenv,setenv,unsetenv
表头文件 #include<stdlib.h>
定义函数 char * getenv(const char *name);
函数说明 getenv()用来取得参数name环境变量的内容。参数name为环境变量的名称,如果该变量存在则会返回指向该内容的指针。环境变量的格式为name=value。
返回值 执行成功则返回指向该内容的指针,找不到符合的环境变量名称则返回NULL。
范例 #include<stdlib.h>
mian()
{
char *p;
if((p = getenv(“USER”)))
printf(“USER=%s\n”,p);
}
执行 USER = root
putenv(改变或增加环境变量)
相关函数 getenv,setenv,unsetenv
表头文件 #include4<stdlib.h>
定义函数 int putenv(const char * string);
函数说明 putenv()用来改变或增加环境变量的内容。参数string的格式为name=value,如果该环境变量原先存在,则变量内容会依参数string改变,否则此参数内容会成为新的环境变量。
返回值 执行成功则返回0,有错误发生则返回-1。
错误代码 ENOMEM 内存不足,无法配置新的环境变量空间。
范例 #include<stdlib.h>
main()
{
char *p;
if((p = getenv(“USER”)))
printf(“USER =%s\n”,p);
putenv(“USER=test”);
printf(“USER+5s\n”,getenv(“USER”));
}
执行 USER=root
USER=root
setenv(改变或增加环境变量)
相关函数 getenv,putenv,unsetenv
表头文件 #include<stdlib.h>
定义函数 int setenv(const char *name,const char * value,int overwrite);
函数说明 setenv()用来改变或增加环境变量的内容。参数name为环境变量名称字符串。
参数 value则为变量内容,参数overwrite用来决定是否要改变已存在的环境变量。如果overwrite不为0,而该环境变量原已有内容,则原内容会被改为参数value所指的变量内容。如果overwrite为0,且该环境变量已有内容,则参数value会被忽略。
返回值 执行成功则返回0,有错误发生时返回-1。
错误代码 ENOMEM 内存不足,无法配置新的环境变量空间
范例 #include<stdlib.h>
main()
{
char * p;
if((p=getenv(“USER”)))
printf(“USER =%s\n”,p);
setenv(“USER”,”test”,1);
printf(“USER=%s\n”,getenv(“USEr”));
unsetenv(“USER”);
printf(“USER=%s\n”,getenv(“USER”));
}
执行 USER = root
USER = test
USER = (null)
‘拾’ C语言 CGI getenv 会产生什么效果
已经设置了的环境变量,才能用程序getenv取得。
取来的内容存起来用,例如:
char ev[200];
strcpy(ev,getenv("HOMEPATH"));
//过一段时间和做一些事情后信息还保留着
printf("%s",ev);
-----------
进程中自己设置的环境变量,不一定能自己用getenv 取出。
系统 环境变量 进程中(父,子) 有 一定 的 继承性。