Set string variable in C from argv[1]

I am trying to learn C, and I wonder why this doesn't work?

#include <stdio.h> int main(int argc, char *argv[]) { char testvar[] = argv[0]; //do something with testvar return 0; } 

3 Answers

You could do this instead:

char *testvar = argv[0]; 

Or maybe:

char *testvar = strdup(argv[0]); /* Remember to free later. */ 

As pmg notes, strdup isn't standard. Implementing it using malloc + memcpy is a nice exercise.

Or even:

char testvar[LENGTH]; if (strlen(argv[0]) >= LENGTH) fprintf(stderr, "%s is too long!\n"); else strcpy(testvar, argv[0]); 

But then again you might be looking for:

char testvar[] = "testvar"; 
0

That syntax is valid only to initialize a char array from a literal, i.e. when you explicitly write in the source code what characters must be put in the array.

If you just want a pointer to it (i.e. "another name" to refer to it) you can do:

char * testvar = argv[0]; 

if instead you want a copy of it you have to do:

size_t len = strlen(argv[0]); char * testvar = malloc(len+1); if(testvar==NULL) { /* allocation failed */ } strcpy(testvar, argv[0]); /* ... */ free(testvar); 

You need a constant to initialize an object. argv[0] is not a constant.
"foobar" below is a constant

#include <stdlib.h> #include <string.h> int main(int argc char **argv) { char array[] = "foobar"; /* array has 7 elements */ char *testvar; testvar = malloc(strlen(argv[0]) + 1); /* remember space for the NUL terminator */ if (testvar != NULL) { strcpy(testvar, argv[0]); /* do something with testvar */ free(testvar); } else { /* report allocation error */ } return 0; } 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like