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
buffer(3)							      OpenSSL								 buffer(3)

NAME
BUF_MEM_new, BUF_MEM_free, BUF_MEM_grow, BUF_strdup - simple character arrays structure SYNOPSIS
#include <openssl/buffer.h> BUF_MEM *BUF_MEM_new(void); void BUF_MEM_free(BUF_MEM *a); int BUF_MEM_grow(BUF_MEM *str, int len); char * BUF_strdup(const char *str); DESCRIPTION
The buffer library handles simple character arrays. Buffers are used for various purposes in the library, most notably memory BIOs. The library uses the BUF_MEM structure defined in buffer.h: typedef struct buf_mem_st { int length; /* current number of bytes */ char *data; int max; /* size of buffer */ } BUF_MEM; length is the current size of the buffer in bytes, max is the amount of memory allocated to the buffer. There are three functions which handle these and one "miscellaneous" function. BUF_MEM_new() allocates a new buffer of zero size. BUF_MEM_free() frees up an already existing buffer. The data is zeroed before freeing up in case the buffer contains sensitive data. BUF_MEM_grow() changes the size of an already existing buffer to len. Any data already in the buffer is preserved if it increases in size. BUF_strdup() copies a null terminated string into a block of allocated memory and returns a pointer to the allocated block. Unlike the standard C library strdup() this function uses OPENSSL_malloc() and so should be used in preference to the standard library strdup() because it can be used for memory leak checking or replacing the malloc() function. The memory allocated from BUF_strdup() should be freed up using the OPENSSL_free() function. RETURN VALUES
BUF_MEM_new() returns the buffer or NULL on error. BUF_MEM_free() has no return value. BUF_MEM_grow() returns zero on error or the new size (i.e. len). SEE ALSO
bio(3) HISTORY
BUF_MEM_new(), BUF_MEM_free() and BUF_MEM_grow() are available in all versions of SSLeay and OpenSSL. BUF_strdup() was added in SSLeay 0.8. 0.9.7a 2000-09-19 buffer(3)
All times are GMT -4. The time now is 11:42 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy