access violation error
Michael P.
baseball.mjp at gmail.com
Wed Aug 13 17:21:05 PDT 2008
Koroskin Denis Wrote:
> On Thu, 14 Aug 2008 01:23:05 +0400, Wyverex <wyverex.cypher at gmail.com>
> wrote:
>
> > Michael P. wrote:
> >> /* junior304.d
> >> 2008 junior problem 3
> >> Smile with similies
> >> Ask for 2 numbers; the number of adjectives and nouns
> >> After you get the numbers and nouns and adjectives, out all possible
> >> similies
> >> August 12th, 2008 */
> >> //Imports
> >> import std.stdio;
> >> /*****
> >> *Main*
> >> *****/
> >> void main()
> >> {
> >> int numberOfAdjectives;
> >> scanf( "%d", &numberOfAdjectives );
> >> int numberOfNouns;
> >> scanf( "%d", &numberOfNouns );
> >>
> >> char[][] adjectives; //array of strings to hold the adjectives
> >> adjectives.length = 6; //max number that user enters is 5, 6 to be
> >> safe char[][] nouns; //same as above, but for nouns
> >> nouns.length = 6; //same as adjectives reason
> >>
> >> //get adjectives first
> >> for ( int i = 0; i < numberOfAdjectives; i++ ) //get the specified #
> >> of adjectives
> >> {
> >> scanf( "%s", &adjectives[ i ] );
> >> }
> >>
> >> //now get the # of nouns specified
> >> for ( int i = 0; i < numberOfNouns; i++ )
> >> {
> >> scanf( "%s", &nouns[ i ] );
> >> }
> >>
> >> //print out all possible similies
> >> for ( int i = 0; i < numberOfAdjectives; i++ )
> >> {
> >> for ( int j = 0; j < numberOfNouns; j++ )
> >> {
> >> //for every adjective, place a noun after and turn it into a similie
> >> writefln( "%s as %s", adjectives[ i ], nouns[ j ] );
> >> }
> >> }
> >> }
> >> I get an accessviolation when I enter the last 2 for loops; any
> >> reason why?
> >> Input is:
> >> 3
> >> 2
> >> Easy
> >> Soft
> >> Smart
> >> pie
> >> rock
> >> error!
> >
> Your code is seriously broken!
>
> The following line is wrong, for example:
> > scanf( "%s", &nouns[ i ] );
>
> What are you doing here? Are you out of your mind? You are passing a
> pointer to a char[]* to a function that accept a char*. Your array will be
> overwritten with whatever you will type. It is wrong, wrong, wrong!
>
> I think that you don't understand something. First of all, what is a
> char[]? It is a struct that consists of a array size and a pointer:
>
> struct CharArray {
> size_t size;
> char* ptr;
> }
>
> typeof(nounts[i]) is a char[], typeof(&nouns[i]) is char[]*. You pass this
> pointer to a function that accepts a pointer to a preallocated buffer for
> a string to be written to.
>
> A quick fix would be to:
> 1) allocate a buffer:
> nouns[i] = new char[64];
> 2) pass a pointer to the preallocated buffer:
> scanf("%s", nouns[i].ptr);
>
> A good fix would be to use readf instead. I didn't use it, but this should
> be sufficient:
> readf("%s", &nouns[i]);
>
>
> > quick fix is to use printf
> > printf( "%s as %s", &adjectives[ i ], &nouns[ j ] );
> >
> > i think (not sure don't really use phobos that much) scanf doesn't
> > return strings in a format writef likes...
> >
> > I though theres a readf but cant find documentation on it...
>
> Test before posting, please!
Sorry I made you angry...
I changed all the scanfs to din.readfs and everything worked okay... does that solve my passing a pointer to a string to function that accepts a pointer to a char?
I guess I should check the documentation for some stuff like that.
More information about the Digitalmars-d-learn
mailing list