Sponsored Content
Homework and Emergencies Homework & Coursework Questions Malloc - unlimited input from user Post 302777077 by Corona688 on Thursday 7th of March 2013 10:33:23 AM
Old 03-07-2013
You're using too many *'s. Wherever you see * in front, imagine an [] at the end: ** would be an array of arrays.

sizeof(char **) doesn't make sense either. You want 5000 characters. How large is one character? sizeof(char). How large is 5000 of them? sizeof(char) * 5000.

Code:
char *buffer=(char *)malloc(sizeof(char)*5000);

Next, you don't need strncmp, strcmp() will do. fgets() and the like NULL-terminate their strings properly.

Last, how do you handle unlimited input? you can use realloc() to extend the size of an existing block of memory.

Code:
buffer=realloc(buffer, 10000*sizeof(char));

You can even call realloc() on a NULL pointer(pointer to nothing) -- it will know to just give you fresh data. So you can just run the exact same code every loop, the first time isn't anything special.

So:

Code:
int main(void)
{
        int pos=0; // pos:  how many bytes have been read already
        int size=0; // size:  how large the buffer is
        char *buffer=NULL; // The data buffer

        buffer=realloc(buffer, pos+5000); // Add 5000 more bytes.
        if(buffer == NULL)
        {
                printf("out of memory\n");
                return(1);
        }
        size=pos+5000; // We need 5000 bytes past the end of the last data
        fgets(buffer+pos, 5000, stdin); // Read it 'pos' bytes past the start of the buffer, to add to the end
        pos=strlen(buffer); // How long is the data in the buffer now?
}

 

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

setting unlimited filesize for a filesystem in

All, How can I enable largefiles in one of the filesytems in Sun OS 5.9 ? ls -l -rw-r--r-- 1 oracle dba 2548163397 Dec 3 02:57 TT_TT_full.dmp.Z cp -p TT_TT_full.dmp.Z /exports/tt/ cp: TT_TT_full.dmp.Z: File too large ulimit -a time(seconds) unlimited file(blocks) ... (1 Reply)
Discussion started by: win_vin
1 Replies

2. Shell Programming and Scripting

Getting user input

I am trying to create a shell (ksh) which has two "read" commands, one which reads a line from a file and another which is inside a loop that reads user input from a keyboard. However, the "read" command inside the loop uses the input from the file and it does not get the user input from keyboard.... (3 Replies)
Discussion started by: stevefox
3 Replies

3. UNIX for Advanced & Expert Users

set Ulimit data segment to Unlimited

Hi, as per my Unix admin all parameters in Ulimit are set to Unlimited in Hard limits but some how few profiles setting data segment part to limited number value. So i wanted to over write in my profile to set unlimited as hard limits are set to unlimited. What is the command to set ulimit for... (1 Reply)
Discussion started by: terala_s
1 Replies

4. HP-UX

ulimit -c unlimited

Hi, I want to set the coredump to unlimited, but it seems it does not work. > ulimit -a time(seconds) unlimited file(blocks) unlimited data(kbytes) 1048576 stack(kbytes) 131072 memory(kbytes) unlimited coredump(blocks) 4194303... (1 Reply)
Discussion started by: mr_andrew
1 Replies

5. Shell Programming and Scripting

How to get the user input recursively until the user provides valid input

Hi, echo "Enter file name of input file list along with absolute path : " read inputFileList if then for string in `cat inputFileList` do echo $string done else echo " file does not exist" fi From the above code, if the user enters a invalid file... (1 Reply)
Discussion started by: i.srini89
1 Replies

6. Solaris

HOW to set unlimited login attempts for user in Solaris?

Hi Admins, HOW to set unlimited login attempts for user in Solaris ? And do I need to insatll any packages before doing this? Thanks. (1 Reply)
Discussion started by: manalisharmabe
1 Replies

7. Shell Programming and Scripting

Script interacts with user , based on user input it operates

i have a script which takes input from user, if user gives either Y/y then it should continue, else it should quit by displaying user cancelled. #!/bin/sh echo " Enter your choice to continue y/Y OR n/N to quit " read A if then echo " user requested to continue " ##some commands... (7 Replies)
Discussion started by: only4satish
7 Replies

8. Shell Programming and Scripting

User input and run awk using the input

I am trying to allow a user to enter in text and then store that text in a variable $gene to run in an awk command in which those values are used to run some calculations. I am getting syntax errors however, when I try. Thank you :). The awk runs great if it is a pre-defined file that is used,... (7 Replies)
Discussion started by: cmccabe
7 Replies

9. Red Hat

Ulimit -c unlimited

I was trying to generate core dump of a process.But it is not generated. While digging up the issue I found that Core File Size is set to 0. I set it with #ulimit -c unlimited.After that I found the core file size is set to 0 (ulimit -a).I exit that session and again logged in.But found the core... (12 Replies)
Discussion started by: Anjan Ganguly
12 Replies
explain_fsetpos(3)					     Library Functions Manual						explain_fsetpos(3)

NAME
explain_fsetpos - explain fsetpos(3) errors SYNOPSIS
#include <libexplain/fsetpos.h> const char *explain_fsetpos(FILE *fp, fpos_t *pos); const char *explain_errno_fsetpos(int errnum, FILE *fp, fpos_t *pos); void explain_message_fsetpos(char *message, int message_size, FILE *fp, fpos_t *pos); void explain_message_errno_fsetpos(char *message, int message_size, int errnum, FILE *fp, fpos_t *pos); DESCRIPTION
These functions may be used to obtain explanations for errors returned by the fsetpos(3) system call. explain_fsetpos const char *explain_fsetpos(FILE *fp, fpos_t *pos); The explain_fsetpos function is used to obtain an explanation of an error returned by the fsetpos(3) system call. The least the message will contain is the value of strerror(errno), but usually it will do much better, and indicate the underlying cause in more detail. The errno global variable will be used to obtain the error value to be decoded. fp The original fp, exactly as passed to the fsetpos(3) system call. pos The original pos, exactly as passed to the fsetpos(3) system call. Returns: The message explaining the error. This message buffer is shared by all libexplain functions which do not supply a buffer in their argument list. This will be overwritten by the next call to any libexplain function which shares this buffer, including other threads. Note: This function is not thread safe, because it shares a return buffer across all threads, and many other functions in this library. Example: This function is intended to be used in a fashion similar to the following example: if (fsetpos(fp, pos) < 0) { fprintf(stderr, "%s ", explain_fsetpos(fp, pos)); exit(EXIT_FAILURE); } The above code example is available pre-packaged as the explain_fsetpos_or_die(3) function. explain_errno_fsetpos const char *explain_errno_fsetpos(int errnum, FILE *fp, fpos_t *pos); The explain_errno_fsetpos function is used to obtain an explanation of an error returned by the fsetpos(3) system call. The least the mes- sage will contain is the value of strerror(errno), but usually it will do much better, and indicate the underlying cause in more detail. errnum The error value to be decoded, usually obtained from the errno global variable just before this function is called. This is neces- sary if you need to call any code between the system call to be explained and this function, because many libc functions will alter the value of errno. fp The original fp, exactly as passed to the fsetpos(3) system call. pos The original pos, exactly as passed to the fsetpos(3) system call. Returns: The message explaining the error. This message buffer is shared by all libexplain functions which do not supply a buffer in their argument list. This will be overwritten by the next call to any libexplain function which shares this buffer, including other threads. Note: This function is not thread safe, because it shares a return buffer across all threads, and many other functions in this library. Example: This function is intended to be used in a fashion similar to the following example: if (fsetpos(fp, pos) < 0) { int err = errno; fprintf(stderr, "%s ", explain_errno_fsetpos(err, fp, pos)); exit(EXIT_FAILURE); } The above code example is available pre-packaged as the explain_fsetpos_or_die(3) function. explain_message_fsetpos void explain_message_fsetpos(char *message, int message_size, FILE *fp, fpos_t *pos); The explain_message_fsetpos function is used to obtain an explanation of an error returned by the fsetpos(3) system call. The least the message will contain is the value of strerror(errno), but usually it will do much better, and indicate the underlying cause in more detail. The errno global variable will be used to obtain the error value to be decoded. message The location in which to store the returned message. If a suitable message return buffer is supplied, this function is thread safe. message_size The size in bytes of the location in which to store the returned message. fp The original fp, exactly as passed to the fsetpos(3) system call. pos The original pos, exactly as passed to the fsetpos(3) system call. Example: This function is intended to be used in a fashion similar to the following example: if (fsetpos(fp, pos) < 0) { char message[3000]; explain_message_fsetpos(message, sizeof(message), fp, pos); fprintf(stderr, "%s ", message); exit(EXIT_FAILURE); } The above code example is available pre-packaged as the explain_fsetpos_or_die(3) function. explain_message_errno_fsetpos void explain_message_errno_fsetpos(char *message, int message_size, int errnum, FILE *fp, fpos_t *pos); The explain_message_errno_fsetpos function is used to obtain an explanation of an error returned by the fsetpos(3) system call. The least the message will contain is the value of strerror(errno), but usually it will do much better, and indicate the underlying cause in more detail. message The location in which to store the returned message. If a suitable message return buffer is supplied, this function is thread safe. message_size The size in bytes of the location in which to store the returned message. errnum The error value to be decoded, usually obtained from the errno global variable just before this function is called. This is neces- sary if you need to call any code between the system call to be explained and this function, because many libc functions will alter the value of errno. fp The original fp, exactly as passed to the fsetpos(3) system call. pos The original pos, exactly as passed to the fsetpos(3) system call. Example: This function is intended to be used in a fashion similar to the following example: if (fsetpos(fp, pos) < 0) { int err = errno; char message[3000]; explain_message_errno_fsetpos(message, sizeof(message), err, fp, pos); fprintf(stderr, "%s ", message); exit(EXIT_FAILURE); } The above code example is available pre-packaged as the explain_fsetpos_or_die(3) function. SEE ALSO
fsetpos(3) reposition a stream explain_fsetpos_or_die(3) reposition a stream and report errors COPYRIGHT
libexplain version 0.52 Copyright (C) 2010 Peter Miller explain_fsetpos(3)
All times are GMT -4. The time now is 12:22 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy