(已解決) 在C語言裡面 該如何處理跳脫字元? [論壇 - Ubuntu 程式設計]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



(已解決) 在C語言裡面 該如何處理跳脫字元?
會員二級
註冊日期:
2012/6/27 20:43
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 175
MP : 27 / 1158
EXP: 0
離線
各位大大好~

小弟透過C語言跟mysql做insert時 發生了跳脫字元的狀況

有一字串為:I don't know

想當然 如果不理會他 則在insert時 會造成syntax error

在PHP裡面 我們可以透過 mysql_real_escape_string回傳一個處理過後的字串 再來insert

小弟查過mysql的API 也的確有提供一樣的function可使用

但他似乎不像 PHP的function來得簡單

簡單來說 就是我看不懂到底該如何使用這個function

所以 小弟打算自己寫一個function來處理 ' and " 這兩個跳脫字元

function如下:

char *fnEscapeString( char * target )
{
char * newTarget;
newTarget = (char*) malloc( 100*sizeof(char) );
int i = 0;
for ( i = 0 ; i < strlen( target ) ; i++ )
{
if ( target[i] == 34 )
newTarget[i] = '\"';
else if ( target[i] == 39 )
newTarget[i] = "\'";
else
newTarget[i] = target[i];
} // for

return newTarget;
} // fnEscapeString()

但在編譯時 會出現以下error message:

warning: assignment makes integer from pointer without a cast [enabled by default]

小弟知道是因為 型別不同所導致

想請教各位大大 該怎麼改會比較好呢?

麻煩各位大大了 <(_ _)>

2013/8/28 23:14
最後修改: 迷途小書僮 於 2013/8/29 1:58:52
應用擴展 工具箱
回覆: 在C語言裡面 該如何處理跳脫字元?
會員二級
註冊日期:
2012/6/27 20:43
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 175
MP : 27 / 1158
EXP: 0
離線
我將程式碼改成如下解決了error message的問題:

char *fnEscapeString( char * target )
{
char * newTarget;
newTarget = (char*) malloc( 100*sizeof(char) );
int i = 0, j = 0;
for ( i = 0 ; i < strlen( target ) ; i++ )
{
if ( target[i] == '\'' )
{
newTarget[j] = '\\';
j++;
} // if
else if ( target[i] == '\"' )
{
newTarget[j] = '\\';
j++;
} // else if

newTarget[j] = target[i];
j++;
} // for

return newTarget;
} // fnEscapeString()

此用意在於

當程式判斷到出現 ' or "時

我在他們前面+上 \

但另外一個問題又出來了

有時候 在insert時 會出現如下error message:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '�',

感覺在insert的字串裡面莫名其妙多了 亂碼

不曉得有沒有大大有遇過類似的經驗

或是 還有哪種方式可以避免 跳脫字元呢?

麻煩各位大大解惑了 >"<

2013/8/29 1:15
應用擴展 工具箱
回覆: 在C語言裡面 該如何處理跳脫字元?
會員二級
註冊日期:
2012/6/27 20:43
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 175
MP : 27 / 1158
EXP: 0
離線
小弟最後還是把MySQL提供的mysql_real_escape_string搞懂了!!

用法如下:

char *target, *newTarget;
target = (char*) malloc( 100*sizeof(char) );
newTarget = (char*) malloc( 100*sizeof(char) );
strcpy( from, "I'm fine." );
mysql_real_escape_string( link, newTarget, target, strlen( target ) );
printf( "%s\n", newTarget );

如此一來 Output會變成:I\'m fine.

解決問題~終於可以睡了 XD

2013/8/29 1:57
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.