Sponsored Content
Top Forums Programming Pure C function pointer on printing vowels twice Post 302997580 by yifangt on Tuesday 16th of May 2017 11:30:58 PM
Old 05-17-2017
Pure C function pointer on printing vowels twice

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.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
/*
 *Demonstrate the use of dispatch tables
 */

/*Print a char twice like putchar, return char if successful, or EOF on error.*/

int putcharTwice(int c)
{
    if (putchar(c) == EOF || putchar(c) == EOF)  {//Q1
    return EOF;
    } else {
    return c;
    }
}

#define NUM_CHARS (UCHAR_MAX + 1)    //UCHAR_MAX is in limits.h

int main(int argc, char **argv)
{
/*This declares table as array of function pointers */
    int (*table[NUM_CHARS]) (int);   //Q2
    int i;
    int c;

    for (i = 0; i < UCHAR_MAX; i++) {
    /* default is to call putchar */
    table[i] = putchar;
    }

    /*but lower-case vowels show up twice */
    table['a'] = putcharTwice; //Q3, and following 4 lines
    table['e'] = putcharTwice; //Q3
    table['i'] = putcharTwice; //Q3
    table['o'] = putcharTwice; //Q3
    table['u'] = putcharTwice; //Q3

    while ((c = getchar()) != EOF) {
    table[c] (c); //Q4,
    }
    return 0;
}

The code was compiled without any problem,
Code:
$ echo "The quick brown fox jumps over the lazy dog!" | ./a.out
$ Thee quuiick broown foox juumps ooveer thee laazy doog!

Q1: How does the logic work by repeating the same condition on both sides of "||" ? I tried using only one side of the OR condition, the code compiled without error but did not work as expected.

Q2:Even not quite sure how to ask this question. Is this a prototype of a function? But the calling is without any parameter see Q3.

Q3: Calling of the function does not have a parameter at all. How does it work?

Q4: I thought I understand this line, but I must have wrong catch because of Q2.

Thanks a lot!
 

10 More Discussions You Might Find Interesting

1. Programming

Problem with function which reutrns pointer to a value

i have a function: char *pcCityIdToCountryName(ADMIN_DB_DATA *pstHEader, unit uiCityID) this returns a pointer to CountryName if cityId is given. to retrieve countryname i give: char *CountryName; CountryName = pcCityIdToCountryName(..................); but when i compile it is giving :... (5 Replies)
Discussion started by: jazz
5 Replies

2. Programming

Pure Virtual Function in C++

Dear All, Here I want to know why we put =0 in case of pure virtual function, why not =1, =2 or any thing else Please send me answer any one as soon as possible. (1 Reply)
Discussion started by: krishna_sicsr
1 Replies

3. Programming

How to return void function pointer

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

4. Programming

Function pointer to inline function ?

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

Function Returning Pointer

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. UNIX for Dummies Questions & Answers

Printing pointer address

How can I print the memory address of a pointer using printf (or any other STDOUT functions?). I see in Linux its %p but not in unix, help? thanks (5 Replies)
Discussion started by: perleo
5 Replies

7. 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

8. Programming

Trivial doubt about C function pointer

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

9. UNIX for Dummies Questions & Answers

Counting vowels in string. "Comparison pointer-integer".

I'm trying to write a programme which scans strings to find how many vowels they contain. I get an error saying that I'm trying to compare a pointer and an integer inif(*v == scanme){. How can I overcome this ? Also, the programme seems to scan only the first word of a string e.g.: if I type "abc... (1 Reply)
Discussion started by: fakuse
1 Replies

10. Programming

Segmentation fault when I pass a char pointer to a function in C.

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
pure-quotacheck(8)						     Pure-FTPd							pure-quotacheck(8)

NAME
pure-quotacheck - Update virtual quota files for Pure-FTPd SYNTAX
pure-quotacheck -u username/gid -d home directory [-g group/gid] DESCRIPTION
pure-quotacheck create a .ftpquota file in the specified directory. This file contains the current file and size of the directory, and it is used by Pure-FTPd when virtual quotas are enabled. It's recommended to periodically run pure-quotacheck for every user, in crontabs. OPTIONS
-d <directory> Scans the specified <directory>. -g <group or gid> Sets the group files will be scanned as. This is optional : if a user name is passed to -u</fR>, group are automatically retrieved. -u <user or uid> Set the user name files will be scanned as. This is mandatory, and it can't be "root". -h Output usage information and exit. FILES
.ftpquota EXAMPLES
To run this program the standard way type: pure-quotacheck -u john -d /home/john AUTHORS
Frank DENIS <j at pureftpd dot org> SECURITY
pure-quotacheck switches real and effective uids/gids as soon as possible. Root privileges are never given back. pure-quotacheck refuses to scan directories with uid = 0 (root) or gid = 0 (wheel/root) . pure-quotacheck performs a chroot() call to the home directory. It never traverses parent directories. pure-quotacheck only scans real files (no socket, no pipe, etc) . pure-quotacheck enforces read access on directories to prevent against people doing chmod 0 before a quota scan. pure-quotacheck enforces write access on the home directory to properly write the .ftpquota file. pure-quotacheck never scans the same inode/device pair twice. SEE ALSO
ftp(1), pure-ftpd(8) pure-ftpwho(8) pure-mrtginfo(8) pure-uploadscript(8) pure-statsdecode(8) pure-pw(8) pure-quotacheck(8) pure-authd(8) RFC 959, RFC 2228, RFC 2389 and RFC 2428. Pure-FTPd team 1.0.36 pure-quotacheck(8)
All times are GMT -4. The time now is 09:19 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy