Andrew wrote:
> Hi all,
>
> I'm trying to design my own events system, using a queue type method.
> What I need to do is store certain information (in this case a command)
> into a char array. I'll give you an example...
>
> char eventarray[30000];
>
> void set_event(int time, long idnum, char *comm)
> {
> eventarray[0] = *comm; /* Put's all of comm into 0 */
> }
>
> That's a part of my code. I can see what it's trying to do - it's trying
> to put a large string into the space designed to hold only a single byte.
It copies the first character of comm to the first character of event array.
eventyarray[0] and *eventarray are actually equivalent, they both have
type char,
you could have just as well written
*eventarray = *comm, or evenarray[0] = comm[0]
To copy a string you must use strcpy, this isn't C++ where you can override
the = operator to make it do strcpy for you. C has no builtin string type.
> But I have seen bits of code that look like this....
>
> char stuff[] = {"Hello", "how", "are", "you?"};
This is an array of pointers to char, each constant "FOO" is an array of
characters and an array by itself is treated like a pointer, so
If I write "FOO" in my code, C treats it like a pointer to an array.
In other words, "FOO" is a shortcut for { 'F', 'O', 'O' }
> and then stuff[0] points to Hello, stuff[1] points to how etc. etc.
stuff[0] is a pointer, not a character. stuff[0][0] would be the 'H'
in hello, it is a character.
> Any ideas?
To manipulate strings use the string library. The only type that C knows
how to handle is characters. The string library is designed to handle
arrays of characters that end in '\0'
char *foo = "Hello" is valid, because you can point foo at "Hello", they both
are considered to be pointers to a constant string.
char foo[] = "Hello" is basically the same thing.
char foo = "hello" is not valid, because foo is a character, "hello" is a
pointer
to a character (the first character of the array).
I remember having this confusion about C string when I first started, mainly
because I came from Basic.
> Andrew Ritchie.
>
> | Andrew Ritchie, object@alphalink.com.au.
>
> +------------------------------------------------------------+
> | Ensure that you have read the CircleMUD Mailing List FAQ: |
> | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
> +------------------------------------------------------------+
--
Phoenix -- President of The Artistic Intuition Company
Caelius * Mirror Reflex * Runica * X-Domain * Infinite Realms
http://www.io.com/~fenix
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST