10-28-2005
Your other post implies you may be passing back a string.
You may prefer to use strcpy like so:
char CountryName[XX*];
strcpy(CountryName, pcCityIdToCountryName(..................) );
*where XX is the size of the string.
The reason being is that you don't know if the char pointer being passed back is still pointing to an allocated memory block. Sometimes I have seen functions pass back a pointer to a local variable or memory being allocated and then made free. It just so happens that you are pointing to a memory location that still has a string (null terminated) value. This may not be the case later on in the program's execution, especially when you are allocating and freeing memory frequently, and you may encounter a memory violation.
At least by copying string into a local variable you can protect against any future problems.
Of course, if it is your own function, you can make your own judgements as to the best way to call it, based on your overall design.
10 More Discussions You Might Find Interesting
1. Programming
could any one tell why the following is showing segmentation fault while using **ptr
but working fine using **a
#include<stdio.h>
... (1 Reply)
Discussion started by: useless79
1 Replies
2. Programming
Hello all
im trying to build function that will return void function pointer
what is mean is ( not working )
the main function
void * myClass::getFunction(int type){
if(type==1)
return &myClass::Test1;
if(type==2)
return &myClass::Test2;
}
void myClass::Test1(){... (1 Reply)
Discussion started by: umen
1 Replies
3. Programming
If one wants to get a start address of a array or a string or a block of memory via a function, there are at least two methods to achieve it:
(1) one is to pass a pointer-to-pointer parameter, like:
int my_malloc(int size, char **pmem)
{
*pmem=(char *)malloc(size);
if(*pmem==NULL)... (11 Replies)
Discussion started by: aaronwong
11 Replies
4. Programming
Hi.
Problem: I have to parse the payload of a packet. The payload could be in Big Endian Format (network byte order) or little. That depends on a flag present in the header of the packet.
Solution: A horrible solution could be to check for that flag everytime I have to read a field in the... (11 Replies)
Discussion started by: emitrax
11 Replies
5. Programming
Hi guys.
how a functions such fdopen, ... can return pointer?
are these functions use static memory(variables)? (6 Replies)
Discussion started by: majid.merkava
6 Replies
6. Programming
if i create an array of pointers to a structure "struct node" as:
struct node *r;
and create "n" number of "linked lists" and assign it to the various struct pointers r using some function with a return type as structure pointer as:
r=multiplty(.......) /*some parameters*/
is... (2 Replies)
Discussion started by: mscoder
2 Replies
7. Programming
Hi,
In the below C code,
#include <stdio.h>
void print() {
printf("Hello\n");
}
int main() {
void (*f)() = (void (*)()) print;
f();
(*f)();
}
I wonder, how the syntaxes "f()" and "(*f)()" are treated as same without any error? Is this an improvement or ANSI/ISO... (1 Reply)
Discussion started by: royalibrahim
1 Replies
8. Programming
Does anyone know?
int x = 1;
int *p = &++x; //ok !
int *q = &x++; //gives an error :O
why the first pointer is ok but the second is an error? (13 Replies)
Discussion started by: nishrestha
13 Replies
9. Programming
Have difficulty to understand this pure C code to only print vowels twice from input string. Questions are commented at the end of each place.
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
/*
*Demonstrate the use of dispatch tables
*/
/*Print a char... (11 Replies)
Discussion started by: yifangt
11 Replies
10. Programming
I am passing a char* to the function "reverse" and when I execute it with gdb I get:
Program received signal SIGSEGV, Segmentation fault.
0x000000000040083b in reverse (s=0x400b2b "hello") at pointersExample.c:72
72 *q = *p;
Attached is the source code.
I do not understand why... (9 Replies)
Discussion started by: jose_spain
9 Replies
index(3C) Standard C Library Functions index(3C)
NAME
index, rindex - string operations
SYNOPSIS
#include <strings.h>
char *index(const char *s, int c);
char *rindex(const char *s, int c);
DESCRIPTION
The index() and rindex() functions operate on null-terminated strings.
The index() function returns a pointer to the first occurrence of character c in string s.
The rindex() function returns a pointer to the last occurrence of character c in string s.
Both index() and rindex() return a null pointer if c does not occur in the string. The null character terminating a string is considered
to be part of the string.
USAGE
On most modern computer systems, you can not use a null pointer to indicate a null string. A null pointer is an error and results in an
abort of the program. If you wish to indicate a null string, you must use a pointer that points to an explicit null string. On some
machines and with some implementations of the C programming language, a null pointer, if dereferenced, would yield a null string. Though
often used, this practice is not always portable. Programmers using a null pointer to represent an empty string should be aware of this
portability issue. Even on machines where dereferencing a null pointer does not cause an abort of the program, it does not necessarily
yield a null string.
ATTRIBUTES
See attributes(5) for descriptions of the following attributes:
+-----------------------------+-----------------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+-----------------------------+-----------------------------+
|Interface Stability |Standard |
+-----------------------------+-----------------------------+
SEE ALSO
bstring(3C), malloc(3C), string(3C), attributes(5), standards(5)
SunOS 5.10 24 Jul 2002 index(3C)