|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
加急件!!字符處理 問題 !!!!thanks!
用proc從數據庫取出一個字段值放在char sRecord[2001];
我需要把結果附值到srec中,
因為字段不一定是2001這麼長,所以有可能有只10個字符,後面就都是空格,所以我把空格符號去掉
char sRecord[2001];
........
j=2001;
while(sRecord[j]='\0' || sRecord[j]<=32)
{ j=j-1;
if (j<0) break;} 〈-- j 的值就是字符串的長度
/*然後我把j長度的字符從sRecord中取出,附給sRec*/
memcpy(sRec,sRecord[2001],j);
但是我最後結果fputs到文本中,並沒有把字符串長度完全取出,總少一位,而且還有不知名符號!WHY? |
加急件!!字符處理 問題 !!!!thanks!
memcpy(sRec,sRecord[2001],j+1); |
加急件!!字符處理 問題 !!!!thanks!
char sRecord[2001]; /* 0 - 2000 */
........
j=2000;
while(sRecord[j]='\0' || sRecord[j]<=32)
{ j--;
if (j<0) break;} 〈-- j 的值就是字符串的長度
/*然後我把j長度的字符從sRecord中取出,附給sRec*/
memcpy(sRec,sRecord[2001],j+1); |
加急件!!字符處理 問題 !!!!thanks!
前幾天不是有個去掉空格的帖子? |
加急件!!字符處理 問題 !!!!thanks!
在Pro C中,這樣就可以了
[code]
VARCHAR tmp[2001];
EXEC SQL SELECT SOME_CHAR
INTO :tmp
FROM SOME_TAB;
tmp.arr[tmp.len] = '\0';
strcpy(sRecord,(char *)tmp.arr);
[/code] |
加急件!!字符處理 問題 !!!!thanks!
在proc中我INTO的那個字段是varchar型的,
按你上面的也行麼?
請問,strcpy(sRecord,(char *)tmp.arr);中的sRecord的類型定義為哪種??是char sRecord[2000] 麼?
VARCHAR tmp[2001];
EXEC SQL SELECT SOME_CHAR
INTO :tmp
FROM SOME_TAB;
tmp.arr[tmp.len] = '\0';
strcpy(sRecord,(char *)tmp.arr); |
加急件!!字符處理 問題 !!!!thanks!
搞定了,呵呵,好簡單
j=strlen(sRecord);
while(sRecord[j]=='\0' || sRecord[j]<=32)
{
j=j-1;
if (j<0) break;
}
sRecord[j]='\0';
fputs(sRecord,fp);
fputs("\n",fp); |
加急件!!字符處理 問題 !!!!thanks!
sRecord 是 char
[code]
char sRecord[2001];
VARCHAR tmp[2001];
EXEC SQL SELECT SOME_CHAR
INTO :tmp
FROM SOME_TAB;
tmp.arr[tmp.len] = '\0';
strcpy(sRecord,(char *)tmp.arr);
[/code] |
加急件!!字符處理 問題 !!!!thanks!
memcpy(sRec,sRecord[2001],j-1); |
加急件!!字符處理 問題 !!!!thanks!
| 加急件!!字符處理 問題 !!!!thanks!
| 加急件!!字符處理 問題 !!!!thanks!
VARCHAR tmp[100];
當select後,tmp.arr記錄字符串,tmp.len記錄該字符串的長度。
注意,這時tmp.arr不是以'\0'(NULL)結尾的,是無法用strcpy的。
所以tmp.arr[tmp.len] = '\0'; |
加急件!!字符處理 問題 !!!!thanks!
-->
J結構一樣適合內存的操作,是不會出錯的了!!! |
加急件!!字符處理 問題 !!!!thanks!
運行當然不會錯。
但前j-1個字節就一定是我們要的那個字符串嗎? |
加急件!!字符處理 問題 !!!!thanks!
sure! |
| |