2016-10-11 33 views
2

我想從文本字符串,看起來像解析整數的所有值:sscanf_s無法找到字符串

"f 1/2/3 4/5/6 7/8/9" 

到:

int arr1[3] = { 1, 4, 7 }; 
int arr2[3] = { 2, 5, 8 }; 
int arr3[3] = { 3, 6, 9 }; 

我寫了下面的代碼中使用sscanf_s根據字符串的一般格式解析:

// line = "f 1/2/3 4/5/6 7/8/9" 
int arr1[3], arr2[3], arr3[3]; 

sscanf_s(line.c_str(), "f %d/%d/%d %d/%d/%d %d/%d/%d", 
    &arr1[0], &arr2[0], &arr3[0], 
    &arr1[1], &arr2[1], &arr3[1], 
    &arr1[2], &arr2[2], &arr3[2]); 

奇怪的是,我的ar的內容運行此代碼後的光線是:

arr1 = { 4, 7, -858993460 }; 
arr2 = { 5, 8, -858993460 }; 
arr3 = { 6, 9, -858993460 }; 

這是一種奇怪的結果,這幾乎就像它加載在正確的數據,但之後使陣列由一個向左。奇怪的是,sscanf_s返回9,這表明它使用我傳入的格式找到了9個匹配項。我一直在試圖找到一個錯誤,但我確實沒有看到代碼做錯了什麼。

回答

0

剛編譯此代碼:

#include <iostream> 
#include <cstdio> 

using namespace std; 

int arr1[3], arr2[3], arr3[3]; 

int main() 
{ 
    std::string line = "f 1/2/3 4/5/6 7/8/9"; 
    sscanf_s(line.c_str(), "f %d/%d/%d %d/%d/%d %d/%d/%d", 
     &arr1[0], &arr2[0], &arr3[0], 
     &arr1[1], &arr2[1], &arr3[1], 
     &arr1[2], &arr2[2], &arr3[2]); 

    std::cout << "arr1 : " << arr1[0] << ", " << arr1[1] << ", " << arr1[2] << std::endl; 
    std::cout << "arr2 : " << arr2[0] << ", " << arr2[1] << ", " << arr2[2] << std::endl; 
    std::cout << "arr3 : " << arr3[0] << ", " << arr3[1] << ", " << arr3[2] << std::endl; 
} 

,它工作正常。

+0

我重建了整個VS解決方案,它現在似乎工作正常...真的不知道爲什麼它沒有正確運行之前。不過謝謝你的回覆。 –