文字列の前と最後の二重引用符を削除するプログラムをANSICで作成したので、次のよう"Hello, world"
になりHello, world
ます。
コード:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* removeQuotes(char str[]) {
int i = 1;
int len = strlen(str) - 2;
char * tmp = (char*) malloc (sizeof(char) * len);
for (;i<=len;++i ) {
tmp[i-1] = str[i];
}
return tmp;
}
int main(void) {
char str[] = "Hello, world";
char * abc = removeQuotes(str);
printf("Inside the quotes is: %s length: %d\n"
"Original is: %s length: %d", abc, strlen(abc), str, strlen(str));
return 0;
}
IDEOne(http://ideone.com/Iybuk)では、正しい答えが得られます。しかし、GCCは私に奇妙な何かを与えます:
U→┬↓ length: 22es is: ello, worlESSOR_↑
Original is: Hello, world length: 12
文字列にスペースが含まれている場合にのみ発生します。「Helloworld」などで問題なく動作します。それを正しく機能させるための堅牢な方法はありますか?