storing strings in C


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers storing strings in C
# 1  
Old 04-18-2011
Bug storing strings in C

i'm trying to figure out how to store strings into an array, can someone help me figure it out?

i would like to store the following for example:

array[0] = "dog"
array[1] = "cat"

the inputs are coming from the command line.

Thanks,
# 2  
Old 04-18-2011
Here is a simple example
Code:
main(int argc, char *argv[])
{

   int i;

   char *array[2];
   char *arg1;
   char *arg2;

   printf("argc = %d\n", argc);

   for (i = 0; i < argc; i++)
      printf("argv[%d] = \"%s\"\n", i, argv[i]);

   if (argc != 3)
      return;

   arg1 = malloc(strlen(argv[1]) + 1);
   arg2 = malloc(strlen(argv[2]) + 1);

   strcpy(arg1, argv[1]);
   strcpy(arg2, argv[2]);

   printf("arg1 = %s\n", arg1);
   printf("arg2 = %s\n", arg2);

   array[0] = arg1;
   array[1] = arg2;

   printf("arg1 = %s\n", array[0]);
   printf("arg2 = %s\n", array[1]);

   free(arg1);
   free(arg2);

}

# 3  
Old 04-18-2011
Thanks, fpmurphy!

The one issue i have is that the input is coming from char *av, so only av[0] is storing the inputs. I guess what i'm trying to achieve is that is it possible to hardcopy strings into arrays?

pointers won't work =l
# 4  
Old 04-18-2011
Quote:
Originally Posted by l flipboi l
The one issue i have is that the input is coming from char *av, so only av[0] is storing the inputs. I guess what i'm trying to achieve is that is it possible to hardcopy strings into arrays?

pointers won't work =l
Strings are pointers, to character arrays. = never gives you anything but the pointer to a C string anyway.

If you need to copy it, you have to explicitly put it into memory under your own control, like fpmurphy showed you.

A simpler way which ends up being the exact same thing fpmurphy showed you is the utility function strdup(). It allocates memory and copies the string for you, and returns the pointer to the new memory:
Code:
char **av=(char **)malloc(sizeof(char *)*(argc+1)); // create a char *[] big enough to hold argv

for(n=0; n<argc; n++)
        av[n]=strdup(argv[n]); // Allocates memory, copies string into it, gives you pointer

av[argc]=NULL;


// before your program quits
for(n=0; n<argc; n++) free(av[n]);

free(av);


Last edited by Corona688; 04-18-2011 at 01:26 PM..
# 5  
Old 04-18-2011
great, thanks!

---------- Post updated at 12:36 PM ---------- Previous update was at 11:20 AM ----------

one last question, how do I store an entire line per array index?

say i typed "dog is white" on the command line

then input for array[0] = "dog is white"

next input is "cat is yellow"

array[1] = "cat is yellow"

something like this.

The issue i'm having currently is that i'm only able to store the first args "dog" and "cat"
instead of the whole line.
# 6  
Old 04-18-2011
That's because of how you put them into your program, nothing inside your program is making them split.

Code:
./myprogram "this is argument 1" "this is argument 2" three four five six

# 7  
Old 04-18-2011
gotcha, just figured it out. thanks, Corona!
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Use strings from nth field from one file to match strings in entire line in another file, awk

I cannot seem to get what should be a simple awk one-liner to work correctly and cannot figure out why. I would like to use patterns from a specific field in one file as regex to search for matching strings in the entire line ($0) of another file. I would like to output the lines of File2 which... (1 Reply)
Discussion started by: jvoot
1 Replies

2. UNIX for Beginners Questions & Answers

How to pass strings from a list of strings from another file and create multiple files?

Hello Everyone , Iam a newbie to shell programming and iam reaching out if anyone can help in this :- I have two files 1) Insert.txt 2) partition_list.txt insert.txt looks like this :- insert into emp1 partition (partition_name) (a1, b2, c4, s6, d8) select a1, b2, c4, (2 Replies)
Discussion started by: nubie2linux
2 Replies

3. UNIX for Dummies Questions & Answers

Issue when using egrep to extract strings (too many strings)

Dear all, I have a data like below (n of rows=400,000) and I want to extract the rows with certain strings. I use code below. It works if there is not too many strings for example n of strings <5000. while I have 90,000 strings to extract. If I use the egrep code below, I will get error: ... (3 Replies)
Discussion started by: forevertl
3 Replies

4. Programming

C; storing strings in an array

I am trying to get userinput from stdin and store the lines in an array. If i do this: using a char **list to store strings allocate memory to it #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv) { char *prog = argv; char **linelist; int... (5 Replies)
Discussion started by: tornow
5 Replies

5. Shell Programming and Scripting

Delete lines in file containing duplicate strings, keeping longer strings

The question is not as simple as the title... I have a file, it looks like this <string name="string1">RZ-LED</string> <string name="string2">2.0</string> <string name="string2">Version 2.0</string> <string name="string3">BP</string> I would like to check for duplicate entries of... (11 Replies)
Discussion started by: raidzero
11 Replies

6. UNIX for Dummies Questions & Answers

Delete strings in file1 based on the list of strings in file2

Hello guys, should be a very easy questn for you: I need to delete strings in file1 based on the list of strings in file2. like file2: word1_word2_ word3_word5_ word3_word4_ word6_word7_ file1: word1_word2_otherwords..,word3_word5_others... (7 Replies)
Discussion started by: roussine
7 Replies

7. Shell Programming and Scripting

Storing value in a variable

Hi Everyone, I have a code which requires to be stored in different variables and I am achiving it like this. HOST=`echo $RMP | cut -f2 -d:` NAME=`echo $RMP | cut -f3 -d:` DIR=`echo $RMP | cut -f4 -d:` TYPE=`echo $RMP | cut -f5 -d:` Is there any other way of storing value... (2 Replies)
Discussion started by: gehlnar
2 Replies

8. UNIX for Dummies Questions & Answers

Storing a Function

Hi, I am running Sco Unix v3.2B. I want to know how can I store a function I create so I can use it later simply by just calling it from the command prompt. Sorry if I am asking such a noob question. Thanks. (7 Replies)
Discussion started by: sdilucca
7 Replies

9. Shell Programming and Scripting

Storing a variable?

I'm writing a bash shell script to backup several mysql databases. This script will run on a daily basis and send a copy to a remote FTP repository. The filenames are in the format DATE.backup.sql. How do I store the DATE variable so I can delete/move/etc the file on the FTP server the next time... (4 Replies)
Discussion started by: hoover90
4 Replies

10. Shell Programming and Scripting

How to concatenate two strings or several strings into one string in B-shell?

like connect "summer" and "winter" to "summerwinter"? Can anybody help me? thanks a lot. (2 Replies)
Discussion started by: fontana
2 Replies
Login or Register to Ask a Question