一個鬱悶的C語言小問題

來源:互聯網
上載者:User

      好久沒寫部落格了 ,一是懶,二是沒什麼可寫,或者說最近真正看書的時間不多,時間也是花了的,都搞飛思卡爾了,不過調車這個東西,很耗時間的,但也確實有趣。

 

      今天在同學那看到了KR的《The C Programming Language》,說來慚愧,一時說自己是搞軟體的,但卻沒有看完這本最最經典的著作。

 

      直接翻到第7章輸入與輸出,做第一個練習題7-1,題目是編寫一個程式,根據它自身被調用時存放在argv[0]中的名字,實現將大寫字母轉換為小寫字母或將小寫字母轉換為大寫字母的功能。

 

程式很easy,實現如下(平台ubuntu)

 

#include <stdio.h>  
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char **argv)
{
int (*convcase[2])(int) = {toupper, tolower};
int func;
int result = EXIT_SUCCESS;
int ch;
if(argc > 0)
{
if(toupper((unsigned char)argv[0][0]) == 'U')
{
func = 0;
}
else
{
func = 1;
}
while((ch = getchar()) != EOF)
{
ch = (*convcase[func])((unsigned char)ch);
putchar(ch);
}
}
else
{
fprintf(stderr, "Unknown name. Can't decide what to do./n");
result = EXIT_FAILURE;
}
return result;
}

 

如果程式名第一個字母是u或U則為小寫轉大寫,否則為大寫轉小寫。

 

測試如下:

輸入panghui,輸出依舊是panghui,悲劇了。。。

 

。。。

。。。

 

一時間還真不知道錯哪了,過程不說了,糾結了很久,也許高手一下就看出來了吧。

 

寫個程式程式看看。

 

#include <stdio.h>  
#include <stdlib.h>
int main(int argc, char* argv[])
{
int i;
printf("test main parameter/n");
printf("argc:%d/n", argc);
for(i=0;i<argc;i++)
{
printf("argv[%d]:%s/n", i, argv[i]);
}
exit(0);
}



好了,問題很明顯了,這個當時還真沒想到,我以為./在Linux下無非是說明程式在目前的目錄中尋找而已,結果不是的哦,找到了問題,修改就很簡單了,直接是argv[0][2]就可以了。

 

結果如下:

 

 

----------------------------------------------------------------------------------   轉載我部落格文章鄭重聲明:技術性網站著名原創作者即可轉載,商業性網站必須經過我的同意才能轉載,否則追究責任——

pang123hui的部落格:

部落格園http://www.cnblogs.com/pang123hui/


CSDNhttp://blog.csdn.net/pang123hui/


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.