fprintf i stringi

0

Witam,

problem mam taki, że mam dwuwymiarową tablicę stringów i w momencie próby zapisu do csv ładuje mi pierwszą kolumnę tylko, reszta pozostaje pusta, wygląda to tak:

ID;;;;;;
1;;;;;;
2;;;;;;
for (i=0;i<taby;i++)
		{
			for(j=0;j<tabx;j++)
			{
				cout << tablica[j][i] << ";";
				fprintf(dane, "%s;", tablica[j][i].c_str() );
			}
		} 

I co ciekawe, przy cout w pętli na konsoli wyświetla mi normalnie dane. Przegrzebałem już wujka google i pomysłu nie mam. Macie jakieś pomysły?

0

Zamknij plik lub wywołaj fflush po zapisaniu danych. Poza tym nie masz znaku nowego wiersza, więc wynik wypisany będzie sklejony w drugim wierszu pliku.

0

Tak na pierwszy rzut oka mam nieodparte wrazenie, ze i i j powinny byc odwrotnie (jesli i to wiersze, jak wskazywalby zdrowy rozsadek). I czywiscie na koncu zewnetrznej petli endl, jak zauwazyl przedmówca.

0

Ano już szybko odpowiadam:

  • i i j są poprawnie, ich rozkład to kosmetyka (też miałem takie wrażnie, ale po manualnym wywołaniu przekonałem się, że błędne)
  • nowa linia jest uwzględniona na ostatnich elementach komórek z tabeli

Co ciekawe, debagując w momencie samego fprintf nie pokazuje (na VS 2010, przy zmiennych), że na pozycji tablica[j][i] cokolwiek jest (przy pierwszej pozycji jest "ID", przy każdej kolejnej ""), a mimo to na cout pokazują się normalnie, a linię niżej już zapis jest pusty.

0

Hmm, jedyne co mi przychodzi do głowy, to to, że na początku łańcucha jest bajt zerowy i ewentualnie jakieś inne niedrukowalne znaki przed nim. Nie wiem jak się zachowuje cout w takiej sytuacji ale bardzo możliwe, że wypisuje wszystkie znaki stringa nie patrząc na to czy są zera czy nie ma. Natomiast używając char* bajt zerowy już sygnalizuje koniec łańcucha.

No i jest też inna bardziej ogólna możliwość - piszesz po pamięci nie w tym miejscu gdzie trzeba i się stringi psują. Nie dostajesz przypadkiem jakichś Access Violation albo Heap Corruption?

0

Hm... Chyba musialbys nam pokazac co (i jak) wkladasz do tej tablicy. W Windows ma tez znaczenie jak otwierasz plik.

0

Czy przypadkiem fprintf nie jest w stylu C? Jak piszesz w C++(używasz cout, string) to do zapisu pliku użyj strumieni. cout i fprintf zapewne działają inaczej, więc porównanie działania niewiele da, poza wiedzą że w jednym jest ok a w drugim nie ok.

Pokaż może jak zadeklarowałeś zmienną:

tablica

1 użytkowników online, w tym zalogowanych: 0, gości: 1