『壹』 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 取出。
系統 環境變數 進程中(父,子) 有 一定 的 繼承性。