當我嘗試從C中的文件名中提取2或3位數字的字符串時,出現奇怪的錯誤,有時候它執行正確,有時它不會,輸入的文件名是「EC2_122016_1676_corte22_03012017084106.TXT」,我只想要「corte22」中說「22」的部分。當從C中的字符串中提取數字時出現奇怪的錯誤
在這種情況下的正確結果應該是「代碼:022」,但有時它會顯示另一個值,如「代碼:223」或「代碼:224」,我沒有太多的C語言經驗,我無法解釋爲什麼會發生這種情況,有什麼幫助?
下面是我使用的文件名與代碼分開的代碼:
int main(int argc, char *argv[]) {
char *sourceFileName = "EC2_122016_1676_corte22_03012017084106.TXT";
char fileCode[4] = "\0";
strcpy(fileCode, extractFileCode(sourceFileName));
printf("Code: %s\n", fileCode);
}
char* extractFileCode(const char sourceFileName[]) {
char *tmp = strdup(sourceFileName);
strlwr(tmp);
char *result = strstr(tmp, "corte");
result = strtok(result, "_");
result = extractNumbersFromString(result);
char *t;
// convert the number back to string, but add a leading zero
sprintf(result, "%.3d", strtol(result, &t, 10));
free(tmp);
return result;
}
char* extractNumbersFromString(const char *source) {
char *result = malloc(strlen(source) * sizeof(char));
int index = 0;
int i;
for(i = 0; i < strlen(source); i++) {
if(isdigit(source[i])) {
result[index++] = source[i];
}
}
return result;
}
(和緩衝區太短) –
不要發佈文字圖片! – Olaf
@ Jean-FrançoisFabre當你說buff太短時,你是什麼意思?最終數字永遠不會超過3個字符。 –