On Thu, 11 Apr 1996, Rasmus Rxnlev wrote: > > [SNIP] > file = fopen(fn,"wt"); > if (!file) > { > sprintf(buf, "ERROR: Unable to get filedescriptor in write_alias()"); > mudlog(buf, NRM, MAX(LVL_JUDGE, GET_INVIS_LEV(ch)), TRUE); > return; > } > [END SNIP] > > buf is c pointer to a char, and fn is an array of chars (the filename:) > As in what? Like this: char *buf, fn[size]; Or like this: char buf, *fn = malloc(size); Well, it doesn't really matter. sprintf()'s first argument is a pointer, which is what I think you said. > Shouldnt it work flawlessly ? I mean it's not that I don't assign anything > to buf... Well, I'm actually wondering if it's because buf is a pointer > to a char... should it be an array of chars ? (the mud doesnt crash > whenever an alias is written though..). Watch: char var[512]; Is functionally the same as: char *var; var = (char*) malloc(512); If you pass the first var (var1) to a function, is becomes the same as the second var (var2) as far as the function can see, assuming they're assigned the same location in memory. i.e., if you call func(var1), there is no way that func() can tell that var1 is a statically-allocated segment of memory rather than dynamically-allocated (malloc()'ed) segment of memory. All you do is give the function the address of the first charater of the string. This is why, for many functions that use data of type void* rather than char*, you need to get a length argument too, to prevent a buffer overrun (which should give you a segmentation fault). I don't think I could tell you what your problem is there, but you don't need to use sprintf(), which is slow and unwieldy. Just pass the error message directly to mudlog() or, if that bothers you, assign the error message to buf or use strcpy() to copy it. In summary: 1. mudlog("ERROR: Unable to ... 2. buf = "ERROR: Unable to ... mudlog(buf, ... 3. strcpy(buf, "ERROR: Unable to ... mudlog(buf, ... All of these are perfectly legal, and it's really hard to get an error on all but the last one. Only use sprintf() if you've got some additional information or other to give. For example, sprintf(buf, "ERROR: %s: %s.", fn, sys_errlist[errno]); would give you a much more lucid error message. ________________________________________________________________________ Tel Janin Aellinsar http://www.crocker.com/~icarus McCoy Enterprises Corporation Shayol Ghul Resort and Health Spa Berserker Dragon, Knights of the Cosmos icarus@BERKSHIRE.NET
This archive was generated by hypermail 2b30 : 12/18/00 PST