Sponsored Content
Full Discussion: Unclear pointer and array
Top Forums Programming Unclear pointer and array Post 302884282 by Corona688 on Sunday 19th of January 2014 06:22:32 PM
Old 01-19-2014
Quote:
The most difficult parts with C to me are: 1) dynamic memory allocation of pointers
I think you're overthinking this quite a whole lot. You've divided this into a lot of separate categories like "the correct way to use pointers when malloc is involved", "the correct way to use pointers when printf is involved", "the correct way to use pointers when sprintf is involved", "the correct way to use pointers when strtok is involved", etc -- as if these things had nothing to do with each other.

If you look at them though, their arguments help give you an idea how they work.

Code:
$ man malloc

void *malloc(size_t size);

$ man strtok

char *strtok(char *str, const char *delim);

$ man strcpy

char *strcpy(char *dest, const char *src);

$ man sprintf

int sprintf(char *str, const char *format, ...);

$

malloc returns a 'void *'. It's not const, so the memory it returns is memory you're allowed to write to. 'void' means its of no particular type, that you're expected to cast it into the type you need. So malloc returns memory which you're supposed to cast into some other type, memory which you're allowed to write to.

strtok takes a 'char *', which means you're giving it memory that strtok's allowed to alter, as well as a 'const char *', memory it's not allowed to change -- the list of tokens. It returns a 'char *', a pointer to memory you're allowed to write to. (As it turns out, a pointer to the same memory, even.)

strcpy's arguments show you which one is src and which one is dest, even without their names -- the 'const char *' has to be the source because that's memory strcpy can't write to.

and sprintf takes a pointer to memory it can write to(the output string), memory it can't write to(the command string), and a variable number of arguments just like printf.

As for the way printf and sscanf demand pointers and non-pointers, there's nothing really deep to learn about C there, it's just the way the printf and scanf calls were built. They could have made printf demand everything be pointers, just like scanf does, but didn't.
 

9 More Discussions You Might Find Interesting

1. Programming

pointer

void main() { int a={1,2,3,4,5,6,7,8,9,10}; int *p=a; int *q=&a; cout<<q-p+1<<endl; } The output is 10, how? if we give cout<<q it will print the address, value won't print.... if we give cout<<p it will print the address, value won't print.... p has the base addr; q... (1 Reply)
Discussion started by: sarwan
1 Replies

2. UNIX for Dummies Questions & Answers

Storing pointer array in C

All .. I am having a pointer array . And trying to store the addess into that pointer array . please see below the problem i faced code: int cnt1; char *t_array; char *f_array; for(cnt1=0; cnt1<1000; cnt1++) { t_array =... (1 Reply)
Discussion started by: arunkumar_mca
1 Replies

3. Programming

pass a pointer-to-pointer, or return a pointer?

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

C pointer/array duality confusion

Hi all, Can anyone provide help with getting the right syntax regarding array/pointers in C in the following code? Can't locate a specific example which clarifies this... Say I declare a typedef to an array of pointers to some type... /** * An array of ptrs to sections */ typedef... (4 Replies)
Discussion started by: gorga
4 Replies

5. Programming

help with char pointer array in C

i have an array like #define NUM 8 .... new_socket_fd = accept(socket_fd, (struct sockaddr *) &cli_addr, &client_length); char *items = {"one", "two", "three", "four", "five", "six", "seven", "eight"}; char *item_name_length = {"3", "3", "5", "4", "4", "3", "5", "5"}; ... (1 Reply)
Discussion started by: omega666
1 Replies

6. Programming

structure pointer array as function parameters

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. Shell Programming and Scripting

best practises for scripting + a few unclear points

Hi guys, Besides the points bellow, what would best practices for scripting be ? 1) set the PATH 2) unset the current environment (set -u ?) 3) (re)set the IFS to default value - space (IFS="" <- is this correct ?) 4) check the return code for each action inside the script (cd, rsync,... (1 Reply)
Discussion started by: da1
1 Replies

8. Programming

Character pointer to Character array

how to copy content of character pointer to character array in c programming.. char *num; char name=num; (1 Reply)
Discussion started by: zinat
1 Replies

9. Programming

Pointer for 2D array seems to be 3D in C

I am struggling with the pointer to 2D-array (cf: 2D array of pointers). Can anybody help me elaborate how the pointer x moves in the memory to access the individual of y, especially the high lighted lines? I have talked to one of the curators of the forum, but I am still not quite clear. Here... (1 Reply)
Discussion started by: yifangt
1 Replies
STRING(3)						     Linux Programmer's Manual							 STRING(3)

NAME
stpcpy, strcasecmp, strcat, strchr, strcmp, strcoll, strcpy, strcspn, strdup, strfry, strlen, strncat, strncmp, strncpy, strncasecmp, strp- brk, strrchr, strsep, strspn, strstr, strtok, strxfrm, index, rindex - string operations SYNOPSIS
#include <strings.h> int strcasecmp(const char *s1, const char *s2); int strncasecmp(const char *s1, const char *s2, size_t n); char *index(const char *s, int c); char *rindex(const char *s, int c); #include <string.h> char *stpcpy(char *dest, const char *src); char *strcat(char *dest, const char *src); char *strchr(const char *s, int c); int strcmp(const char *s1, const char *s2); int strcoll(const char *s1, const char *s2); char *strcpy(char *dest, const char *src); size_t strcspn(const char *s, const char *reject); char *strdup(const char *s); char *strfry(char *string); size_t strlen(const char *s); char *strncat(char *dest, const char *src, size_t n); int strncmp(const char *s1, const char *s2, size_t n); char *strncpy(char *dest, const char *src, size_t n); char *strpbrk(const char *s, const char *accept); char *strrchr(const char *s, int c); char *strsep(char **stringp, const char *delim); size_t strspn(const char *s, const char *accept); char *strstr(const char *haystack, const char *needle); char *strtok(char *s, const char *delim); size_t strxfrm(char *dest, const char *src, size_t n); DESCRIPTION
The string functions perform string operations on null-terminated strings. See the individual man pages for descriptions of each function. SEE ALSO
index(3), rindex(3), strcasecmp(3), stpcpy(3), strcat(3), strchr(3), strcmp(3), strcoll(3), strcpy(3), strcspn(3), strdup(3), strfry(3), strlen(3), strncasecmp(3), strncat(3), strncmp(3), strncpy(3), strpbrk(3), strrchr(3), strsep(3), strspn(3), strstr(3), strtok(3), strxfrm(3) COLOPHON
This page is part of release 3.25 of the Linux man-pages project. A description of the project, and information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/. 2010-02-25 STRING(3)
All times are GMT -4. The time now is 07:20 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy