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

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

Chinaunix

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

誰幫忙改下程序錯誤謝謝了~考慮很多天了 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2006-08-28 19:47 |只看該作者 |倒序瀏覽
#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;
}

論壇徽章:
0
2 [報告]
發(fā)表于 2006-08-28 19:51 |只看該作者
這個程序的意思是把int main(int argc, char *argv[])
中的*argv[]參數(shù)分開,然后輸出,但是makeargv函數(shù)中的用strtok分開,
但是這個函數(shù)在的argv[1]的首地址中有“\0”的情況下就不分開了,誰能幫忙解決1下

論壇徽章:
0
3 [報告]
發(fā)表于 2006-08-28 20:16 |只看該作者
不知樓主怎樣輸入串的

論壇徽章:
0
4 [報告]
發(fā)表于 2006-08-28 22:50 |只看該作者
"snew = s + strspn(s, delimiters);         /* snew is real start of string */"
原因在這里  只要含有\(zhòng)0 S后面的字符就被截斷了 所以你后面的處理就跟著錯了

論壇徽章:
0
5 [報告]
發(fā)表于 2006-08-29 17:35 |只看該作者
字符串連接能不能不用“+”號啊,用strcat或者memcpy多好啊

論壇徽章:
0
6 [報告]
發(fā)表于 2006-08-29 20:14 |只看該作者
原帖由 masm32 于 2006-8-28 22:50 發(fā)表
"snew = s + strspn(s, delimiters);         /* snew is real start of string */"
原因在這里  只要含有\(zhòng)0 S后面的字符就被截斷了 所以你后面的處理就跟著錯了


那應(yīng)該怎么改一下呢?
那個s地址確實是輸入的地址啊。
為什么用那個strtok分隔符“\0”就不行呢
還有但是在*p[]為什么他的指針能過去呢?
比如輸入123 qwe asd
在main()中的*argv[]中的
argv[1]=123
argv[2]=qwe
argv[3]=asd
指向數(shù)組的指針就行呢,他的判斷機(jī)制是什么?這個我也去查查~

論壇徽章:
0
7 [報告]
發(fā)表于 2006-08-29 20:17 |只看該作者
原帖由 chenyubing 于 2006-8-29 17:35 發(fā)表
字符串連接能不能不用“+”號啊,用strcat或者memcpy多好啊


strspn函數(shù)是算字符串第一次出現(xiàn)的位置的,不是。net中的那個加號。

論壇徽章:
0
8 [報告]
發(fā)表于 2006-08-29 21:03 |只看該作者
UNIX Systems Programming
- Communication Concurrency and Threads, 2nd Ed (2003)

2.6 Argument Arrays中的例子。

程序本身沒什么錯誤。
只是你想用編程中的hacker手段來測試罷了。
看來你對char *類型理解得還不是很透徹。

舉例1:
$makeargv "Hello, world"
argv[0] = makeargv
argv[1] = "Hello, world"
const char *s = "Hello, world"
結(jié)果:
[0]:Hello,
[1]:world

舉例2:
$makeargv "Hello, world"
argv[0] = makeargv
argv[1] = "Hello, world"
如果你在程序中改變argv[1](argv[1]的首地址中有“\0”,即,argv[1]被截短。)。
若把a(bǔ)rgv[1] = "Hello\0, world",實際上argv[1] = "Hello"。
const char *s = "Hello"
結(jié)果:
[0]:Hello


因此,你提出來的問題也就不成為問題了。

論壇徽章:
0
9 [報告]
發(fā)表于 2006-08-29 21:35 |只看該作者
帖報錯,最好能帖出代碼對應(yīng)的行數(shù)

論壇徽章:
0
10 [報告]
發(fā)表于 2006-08-30 19:52 |只看該作者
原帖由 cmh_2003 于 2006-8-29 21:35 發(fā)表
帖報錯,最好能帖出代碼對應(yīng)的行數(shù)


沒有錯誤啊,可能是網(wǎng)頁的問題,你在調(diào)試1下吧。在gcc
下要有錯誤就報哪行有問題了。

[ 本帖最后由 wenhuaixiang 于 2006-8-30 20:23 編輯 ]
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(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