亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1209 | 回復(fù): 6
打印 上一主題 下一主題

誰幫忙改下程序,已經(jīng)想了很多天了 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2006-08-28 19:59 |只看該作者 |倒序?yàn)g覽
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>

int makeargv(const char *s, const char *delimiters, char ***argvp);

int main(int argc, char *argv[]) {
   char delim[] = " \t";
   int i;
   char **myargv;
   int numtokens;

   if (argc != 2) {
      fprintf(stderr, "Usage: %s string\n", argv[0]);
      return 1;
   }   
   if ((numtokens = makeargv(argv[1], delim, &myargv)) == -1) {
      fprintf(stderr, "Failed to construct an argument array for %s\n", argv[1]);
      return 1;
   }
   printf("The argument array contains:\n");
   for (i = 0; i < numtokens; i++)
      printf("%d:%s\n", i, myargv[i]);
   return 0;
}
int makeargv(const char *s, const char *delimiters, char ***argvp) {
   int error;
   int i;
   int numtokens;
   const char *snew;
   char *t;

   if ((s == NULL) || (delimiters == NULL) || (argvp == NULL)) {
      errno = EINVAL;
      return -1;
   }
   *argvp = NULL;                           
   snew = s + strspn(s, delimiters);         /* snew is real start of string */
   if ((t = malloc(strlen(snew) + 1)) == NULL)
      return -1;
   strcpy(t, snew);               
   numtokens = 0;
   if (strtok(t, delimiters) != NULL)     /* count the number of tokens in s */
      for (numtokens = 1; strtok(NULL, delimiters) != NULL; numtokens++) ;

                             /* create argument array for ptrs to the tokens */
   if ((*argvp = malloc((numtokens + 1)*sizeof(char *))) == NULL) {
      error = errno;
      free(t);
      errno = error;
      return -1;
   }
                        /* insert pointers to tokens into the argument array */
   if (numtokens == 0)
      free(t);
   else {
      strcpy(t, snew);
      **argvp = strtok(t, delimiters);
      for (i = 1; i < numtokens; i++)
          *((*argvp) + i) = strtok(NULL, delimiters);
    }
    *((*argvp) + numtokens) = NULL;             /* put in final NULL pointer */
    return numtokens;
}

這個程序的意思是把int main(int argc, char *argv[])
中的*argv[]參數(shù)分開,然后輸出,但是makeargv函數(shù)中的用strtok分開,
但是這個函數(shù)在的argv[1]的首地址中有“\0”的情況下就不分開了,誰能幫忙解決1下

論壇徽章:
0
2 [報告]
發(fā)表于 2006-08-29 23:15 |只看該作者
原帖由 wenhuaixiang 于 2006-8-28 19:59 發(fā)表
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>

int makeargv(const char *s, const char *delimiters, char ***argvp);

int main(int argc, ...

>>
>>
>>"函數(shù)在的argv[1]的首地址中有“\0”的情況"是什么意思?
>>我這里運(yùn)行很好阿
>>
>>

論壇徽章:
0
3 [報告]
發(fā)表于 2006-08-30 02:13 |只看該作者

回復(fù) 1樓 wenhuaixiang 的帖子

用getopt()和getopt_long()不是更好么?

論壇徽章:
0
4 [報告]
發(fā)表于 2006-08-30 11:45 |只看該作者
原帖由 OLDHAND.ORG 于 2006-8-30 02:13 發(fā)表
用getopt()和getopt_long()不是更好么?

>>
>>
>>可能是他想自己寫一個
>>
>>

論壇徽章:
0
5 [報告]
發(fā)表于 2006-08-30 15:26 |只看該作者
不知道樓主要做什么,原來char *argv[]本來就分開了各個參數(shù),直接輸出就可以了

況且用strtok來分割字符串, 本來就是字符串結(jié)束就不再切割了,"\0" 等同于'\0',為字符串結(jié)束符
如果你要實(shí)現(xiàn),就需要用'\'進(jìn)行強(qiáng)制轉(zhuǎn)換吧!
比如argv[1]="\\0\ta\tb",這樣就可以了

論壇徽章:
0
6 [報告]
發(fā)表于 2006-08-31 18:17 |只看該作者
原帖由 Bayweb 于 2006-8-29 23:15 發(fā)表

>>
>>
>>"函數(shù)在的argv[1]的首地址中有“\0”的情況"是什么意思?
>>我這里運(yùn)行很好阿
>>
>>


你說的運(yùn)行很好是什么意思?
是你在編譯完后運(yùn)行程序,后面緊跟著參數(shù)比如123 qwe asd
然后程序就輸出這幾個參數(shù)嗎?

論壇徽章:
0
7 [報告]
發(fā)表于 2006-08-31 18:29 |只看該作者
原帖由 OLDHAND.ORG 于 2006-8-30 02:13 發(fā)表
用getopt()和getopt_long()不是更好么?


這個例子是我看得unix 高級編程上面的例子,他的意思就是分開命令行中的參數(shù),但是
我運(yùn)行他的例子不行始終不全部輸出參數(shù),所以我來問下~
希望高手能修改那個函數(shù)1下
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP