2009-12-07 7 views
0

J'ai essayé de faire fonctionner mon code sur Windows (déplacé du Mac) et pour une raison quelconque j'obtiens une erreur d'exécution liée à mon appel strcpy.Pourquoi ai-je une erreur d'exécution strcpy dans mon code?

S'il vous plaît aider !!

Cust.h

/* 
* Cust.h 
* Project 3 
* 
* Created by Anthony Glyadchenko on 11/17/09. 
* Copyright 2009 __MyCompanyName__. All rights reserved. 
* 
*/ 
#include <iostream> 
#include <string> 

using namespace std; 

#ifndef CUST_H 
#define CUST_H 

class Cust{ 
public: 
    char * getAcctNum(); 
    void setAcctNum(char num[]); 
    double getCurrBalance(); 
    void setCurrBalance(double balance); 
    void addToCurrBalance(double amount); 
    void subFromCurrBalance(double amount); 
    void setAcctFN(char firstName[]); 
    void setAcctLN(char lastName[]); 
    char * getAcctFN(); 
    char * getAcctLN(); 
    void setPIN(int pin); 
    int getPIN(); 

private: 
    char acctNum[255]; 
    char acctFN[255]; 
    char acctLN[255]; 
    double currBalance; 
    int pin; 
    char fileName[255]; 
}; 
#endif 

Cust.cpp

/* 
* Cust.cpp 
* Project 3 
* 
* Created by Anthony Glyadchenko on 11/17/09. 
* Copyright 2009 __MyCompanyName__. All rights reserved. 
* 
*/ 
#include <fstream> 
#include <string> 
#include <sstream> 
#include "Cust.h" 

using namespace std; 

char * Cust::getAcctNum(){ 
    return acctNum; 
} 

void Cust::setAcctNum(char num[]){ 
    strcpy(acctNum,num); 
} 

double Cust::getCurrBalance(){ 
    return currBalance; 
} 

void Cust::setCurrBalance(double balance){ 
    currBalance = balance; 
} 

void Cust::addToCurrBalance(double amount){ 
    currBalance += amount; 
} 

void Cust::subFromCurrBalance(double amount){ 
    currBalance -= amount; 
} 

void Cust::setAcctFN(char firstName[]){ 
    strcpy(acctFN,firstName); 
} 

void Cust::setAcctLN(char lastName[]){ 
    strcpy(acctLN,lastName); 

} 

char * Cust::getAcctFN(){ 
    return acctFN; 
} 

char * Cust::getAcctLN(){ 
    return acctLN; 
} 

void Cust::setPIN(int pin){ 
    Cust::pin = pin; 
} 

int Cust::getPIN(){ 
    return pin; 
} 

main.cpp

#include <iostream> 
#include <string> 
#include <fstream> 
#include "Cust.h" 
using namespace std; 

int findNumLines(char file[]){ 
    ifstream tempInput(file); 
    char ch; 
    int lineCount = 0; 
    while (!tempInput.eof()){ 
     tempInput.get(ch); 
     if (ch == '\n') lineCount++; 
    } 
    tempInput.close(); 
    return lineCount; 
} 
int main (int argc, char * const argv[]) { 
    Cust customers[500]; 
    char tmpString[70] = " "; 
    char pch[255]; 
    string tmpAcctFN = " "; 
    string tmpAcctLN = " "; 
    ifstream input("P3_custData.txt"); 
    for (int idx = 0; idx < 130; idx++){ 
     input.getline(tmpString, 70, '\n'); 
     strcpy(pch,strtok(tmpString," ")); 
     customers[idx].setAcctNum(pch); 
     cout << pch << endl; 
     strcpy(pch, strtok(NULL," "));; 
     customers[idx].setAcctFN(pch); 
     cout << pch << endl; 
     strcpy(pch, strtok(NULL," "));; 
     customers[idx].setAcctLN(pch); 
     cout << pch << endl; 
     strcpy(pch, strtok(NULL," "));; 
     customers[idx].setCurrBalance(atol(pch)); 
     cout << pch << endl; 
     strcpy(pch, strtok(NULL," "));; 
     customers[idx].setPIN(atoi(pch)); 
     cout << pch << endl; 
    } 
    input.close(); 
    return 0; 
} 

P3_custData.txt

10000  Alicia Jones   1005.00 1234 
10010  Mary  Gonzalez  2040.55 8472 
10020  Bill  Henry   5340.20 7840 
10030  Alex  Brown   10010.50 8202 
10040  Becca  Kingman   983.00 9201 
10050  Oliver Stone   12001.74 2382 
10060  Robert Reich   3010.30 8137 
10070  Judith Johnson   540.98 8203 
10080  Jeremy Brice   672.10 8472 
10090  Andrew Aziz   4041.50 2456 
10100  Alicia Jones   10010.00 8264 
10110  Mary  Gonzalez  2050.51 6252 
10120  Bill  Henry   5340.20 3658 
10130  Audrey Samuels   536.78 7462 
10140  Marion Sams   9788.19 3266 
10150  Richard Rubens   3265.90 6237 
10160  Russell Townsend  123.00 5324 
10170  Carolyn Tanner   4210.60 3256 
10180  Corey  Brill   77.40 4356 
10190  Randall North   44.50 6346 
10200  James  Jackson  10020.00 2457 
10210  Martin Gallagher  2041.50 2345 
10220  William Walker   7340.20 2345 
10230  Ellen  Jacobson  433.99 1234 
10240  Angela Bryer   15010.10 4321 
10250  Steven Bond   960.00 9876 
10260  Sally  Stevens   23.10 2834 
10270  Alan  Fuller   7858.00 7294 
10280  Peter  Prentice  697.00 7618 
10290  Paula  Smith   1020.00 7349 
10300  Alice  Johnson  10030.00 7364 
10310  Gail  Green   3040.55 6717 
10320  Gene  Harold   8340.20 5162 
10330  Lois  Lane   100.00 7234 
10340  Debby  Dewhurst  8765.34 1382 
10350  Louise Talent   350.00 8193 
10360  Louis  Bragg   10091.22 6738 
10370  Alexander Gibson   540.70 7392 
10380  Gertrude Ring   9030.00 7390 
10390  John  Johnson  3299.99 6329 
10400  Alice  Johannsen  2009.80 8273 
10410  Marty  Gordon   2040.55 6712 
10420  William Hurst   540.20 1273 
10430  Barry  True   278.50 3247 
10440  Maxwell Smart   800.66 2119 
10450  Owen  Burton   5261.00 3749 
10460  Diane  Walters  6004.44 3794 
10470  Georgina Trump   7083.00 9283 
10480  Erica  Applegate  12007.00 3649 
10490  Walter Wonkers  15789.40 1639 
10500  Alicia Rogers   1009.00 6392 
10510  Emmanuel Evans   220.50 2803 
10520  Robert Bachman   760.25 9999 
10530  Richard Rogers   2345.10 8888 
10540  Roberta Maxwell  6666.66 6238 
10550  Gregory Ichan   521.30 1111 
10560  Lars  Jensen   497.80 7239 
10570  Roberta Peters  20004.10 3333 
10580  Ali  Masterson  3980.00 8304 
10590  Laurence Leonard  6732.12 3684 
10600  Tracy  Jones   500.00 6382 
10610  Michael Gonzalez  2040.57 3649 
10620  Alexander Henry   5368.10 7389 
10630  Leo  Palmer  21900.00 6283 
10640  Esther Richman   300.00 3684 
10650  Harold Pinter   6783.10 3648 
10660  Eva  Burton   5355.55 7639 
10670  William Shakespeare  0.00 6384 
10680  Russell Carlson  4455.77 1384 
10690  Janice Klein   3965.15 2738 
10700  Henry  Adams   4050.00 2374 
10710  George Gonzalez  2040.55 2739 
10720  Jose  Enrique  5340.20 2376 
10730  Jane  Eakins   657.90 8209 
10740  Justin Prince   8000.12 7394 
10750  Ed  True   5978.00 4798 
10760  Emily  Prentice   34.00 8220 
10770  Olivia Callahan  231.21 5374 
10780  Peter  Cabot   5478.20 8293 
10790  Andrew Austin   1110.10 3792 
10800  Oliver Owens   100.00 8201 
10810  Monty  Wood   200.55 3748 
10820  Terrance Thomas   340.20 6239 
10830  Barry  Brown   105.00 6387 
10840  Harrison Huston   299.78 6384 
10850  Robin  Young   8655.30 9734 
10860  Ishmael Green   10101.10 9246 
10870  Fiona  Fein   257.20 2836 
10880  Florence Gregson  5699.60 6374 
10890  Wilma  Flinstone  78.00 5478 
10900  Nancy  Drew   2001.00 2536 
10910  Captain Kirk   2444.44 7364 
10920  Allie  McGraw   540.20 6483 
10930  Frederick Campbell  1050.00 6492 
10940  Paula  Prescott  5134.44 7483 
10950  Ursula Unger   789.00 6482 
10960  Betty  Banker   4500.34 3567 
10970  Elizabeth Young   1022.00 6489 
10980  Maria  Manners   510.00 5463 
10990  Tracy  Austin   674.10 6834 
11000  Alex  Andrews   300.00 1245 
11010  Mike  Matire   4040.55 7234 
11020  Oscar  Grouch   5340.20 9326 
11030  Jennifer Young   823.33 6593 
11040  Walter True   444.00 3485 
11050  Hudson Haliburton  953.10 8465 
11060  Ursula Angel   321.00 6583 
11070  Zackery Brown   7666.60 9123 
11080  Carole King   10000.00 6382 
11090  Tracy  Burton   955.00 6654 
11100  Arthur Jones   100.00 7893 
11110  Andrew Jackson  4040.55 9173 
11120  Samuel Barber   50.20 2874 
11130  George Gregrory  643.00 7392 
11140  Quentin Larson   21.00 9277 
11150  Dorothy Pace   777.23 4270 
11160  Frieda Flowers  9000.99 6483 
11170  Howard Alexander  78.00 2743 
11180  Henry  Aldritch   55.00 2084 
11190  Beatrice Snow    99.99 2987 
11200  Kelly  Klark   200.00 3874 
11210  Mary  Gonzalez  440.51 2480 
11220  Elly  Hand   555.20 2479 
11230  Gregory George   431.44 4756 
11240  Nancy  Alexander  6220.90 9274 
11250  Sargent Pepper  16870.50 7777 
11260  Linda  Gale   20000.70 2974 
11270  Charles Reilly   544.45 5973 
11280  Chuck  Mangers   10.00 5555 
11290  Wilson Beckett  6010.10 6666 
+0

Quel est le message d'erreur? – Shiv

+0

Quel appel strcpy? –

Répondre

2

Il serait utile que vous affichiez le message d'erreur, mais puisque vous dites que vous allez de Mac à Windows, cela pointerait vers un problème de fin de ligne. Convertissez votre fichier custData.txt pour avoir des fins de ligne Windows (CR + LF) et réessayez comme ça.

+0

Il se bloque à strcpy (acctNum, num); dans la méthode setAcctNum. –

+0

Quelle ligne d'entrée traite-t-elle? – wallyk

+0

En fait, désolé, il se bloque à int main(): strcpy (pch, strtok (tmpString, "")); –

0

La raison la plus probable est que l'un des cinq appels de séquence strtok() renvoie NULL car il n'y a pas suffisamment de champs sur la ligne.

+0

Il y a 5 colonnes ne sont pas là? –

+0

Peut-être que l'entrée a des caractères de tabulation, pas des espaces? – wallyk

+0

Quand je lance son code, je n'ai pas d'erreur sous valgrind ou avec mudflaps (gnu g ++ 4.3.2) –

1

Il se pourrait que votre ligne

input.getline(tmpString, 70, '\n'); 

est à la recherche d'\ n quand il devrait rechercher un \ r \ n ou quelque chose de similaire en raison de la fin de ligne Windows étant différente de la ligne Mac se termine .

+0

C'est un encodage Windows. –

0

Je ne reçois pas une erreur d'exécution, mais je reçois une erreur de temps de compilation (sous Linux) parce que vous ne l'avez pas

#include <cstring> 
#include <cstdlib> 

dans main.cpp

ou

#include <cstring> 

dans Cust.cpp

Après avoir ajouté ceux qu'il a compilé et a fonctionné très bien pour moi ...

Quelle est précisément l'erreur que vous obtenez?

+0

Exception non gérée à 0x6848f693 dans P3_WIN.exe: 0xC0000005: violation de l'accès en lecture l'emplacement 0x00000000. –

+0

C'est certainement une exception de pointeur nul. –

+0

Je les ai tous et il ne compile toujours pas. –

0

Vous n'avez pas spécifié dans quelle ligne du fichier de sortie l'incident se produit. Se pourrait-il que la dernière ligne manque le retour chariot (\ n) à la fin?

Questions connexes