首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

strtok函数和proc中的AT子句,该怎么处理

2012-05-03 
strtok函数和proc中的AT子句1、strtok截取字符char *tmpa b cd echar *tptp strtok(tmp, )//这

strtok函数和proc中的AT子句
1、strtok截取字符
char *tmp="a b cd e";
char *tp;
tp = strtok(tmp, " ");
//这里tp指向a
tp = strtok(NULL, " ");
//这里tp指向b
tp = strtok(NULL, " ");
//这里tp指向cd
问题:
为了获取e,这里使用tp = strtok(NULL, " ");或tp = strtok(NULL, "/");或其它的字符都可以截取到e,是说对于最后一个分隔内容,strtok第二个参数使用任何字符都可以获取到?(前提是之前已经使用strtok截取到之前所有的分隔部分)


2、proc里在PEN、FETCH和CLOSE子句中使用AT子句
proc中:
"若使用了AT子句,则在后面的SQL操作中也要指定该连接,否则操作的是缺省连接上的数据,而不是AT指定的连接。如:
EXEC SQL AT db_link_name SELECT…; EXEC SQL AT db_link_name INSERT…; EXEC SQL AT db_link_name UPDATE…; EXEC SQL AT db_link_name DECLARE cursor_name CURSOR…;

不能在PREPARE、DESCRIBE、OPEN、FETCH、CLOSE中使用AT子句。"

但我在OPEN、FETCH和CLOSE子句中都可以使用AT子句啊,
EXEC SQL AT SCD OPEN scd_cursor
EXEC SQL AT SCD FETCH scd_cursor
EXEC SQL AT SCD CLOSE scd_cursor

谢谢!

[解决办法]
1. 最后一次,就是返回最后那一个token。不管是" ",还是"/"都是没有找到分隔符,把最后那段返回了

[解决办法]
通常在declare游标时使用AT

open的时候使用AT可以编译通过吗?用不用应该都一样吧
[解决办法]
c:\Microsoft SDK\src\crt\strtok.c

C/C++ code
/****strtok.c - tokenize a string with given delimiters**       Copyright (c) 1989-2001, Microsoft Corporation. All rights reserved.**Purpose:*       defines strtok() - breaks string into series of token*       via repeated calls.********************************************************************************/#include <cruntime.h>#include <string.h>#ifdef _MT#include <mtdll.h>#endif  /* _MT *//****char *strtok(string, control) - tokenize string with delimiter in control**Purpose:*       strtok considers the string to consist of a sequence of zero or more*       text tokens separated by spans of one or more control chars. the first*       call, with string specified, returns a pointer to the first char of the*       first token, and will write a null char into string immediately*       following the returned token. subsequent calls with zero for the first*       argument (string) will work thru the string until no tokens remain. the*       control string may be different from call to call. when no tokens remain*       in string a NULL pointer is returned. remember the control chars with a*       bit map, one bit per ascii char. the null char is always a control char.**Entry:*       char *string - string to tokenize, or NULL to get next token*       char *control - string of characters to use as delimiters**Exit:*       returns pointer to first token in string, or if string*       was NULL, to next token*       returns NULL when no more tokens remain.**Uses:**Exceptions:********************************************************************************/char * __cdecl strtok (        char * string,        const char * control        ){        unsigned char *str;        const unsigned char *ctrl = control;        unsigned char map[32];        int count;#ifdef _MT        _ptiddata ptd = _getptd();#else  /* _MT */        static char *nextoken;#endif  /* _MT */        /* Clear control map */        for (count = 0; count < 32; count++)                map[count] = 0;        /* Set bits in delimiter table */        do {                map[*ctrl >> 3] |= (1 << (*ctrl & 7));        } while (*ctrl++);        /* Initialize str. If string is NULL, set str to the saved         * pointer (i.e., continue breaking tokens out of the string         * from the last strtok call) */        if (string)                str = string;        else#ifdef _MT                str = ptd->_token;#else  /* _MT */                str = nextoken;#endif  /* _MT */        /* Find beginning of token (skip over leading delimiters). Note that         * there is no token iff this loop sets str to point to the terminal         * null (*str == '\0') */        while ( (map[*str >> 3] & (1 << (*str & 7))) && *str )                str++;        string = str;        /* Find the end of the token. If it is not the end of the string,         * put a null there. */        for ( ; *str ; str++ )                if ( map[*str >> 3] & (1 << (*str & 7)) ) {                        *str++ = '\0';                        break;                }        /* Update nextoken (or the corresponding field in the per-thread data         * structure */#ifdef _MT        ptd->_token = str;#else  /* _MT */        nextoken = str;#endif  /* _MT */        /* Determine if a token has been found. */        if ( string == str )                return NULL;        else                return string;} 


[解决办法]
strtok 很蛋疼的一个函数 建议换 sscanf

热点排行