Twahanz
Twahanz

Reputation: 224

How To Assign char* to an Array variable

I have recently started to code in C and I am having quite a lot of fun with it. But I ran into a little problem that I have tried all the solutions I could think of but to no success. How can I assign a char* variable to an array?

Example

int main()
{
    char* sentence = "Hello World";

    //sentence gets altered...

    char words[] = sentence;

    //code logic here...

    return 0;
}

This of course gives me an error. Answer greatly appreciated.

Upvotes: 3

Views: 1599

Answers (7)

Dmitry Poroh
Dmitry Poroh

Reputation: 3825

Among other answers I'll try to explain logic behind arrays without defined size. They were introduced just for convenience (if compiler can calculate number of elements - it can do it for you). Creating array without size is impossible.

In your example you try to use pointer (char *) as array initialiser. It is not possible because compiler doesn't know number of elements stayed behind your pointer and can really initialise the array.

Standard statement behind the logic is:

6.7.8 Initialization

...

22 If an array of unknown size is initialized, its size is determined by the largest indexed element with an explicit initializer. At the end of its initializer list, the array no longer has incomplete type.

Upvotes: 0

user3078414
user3078414

Reputation: 1937

Turn all the compiler warnings on and trust what it says. Your array initializer must be a string literal or an initializer list. As such it needs an explicit size or an initializer. Even if you had explicitly initialized it still wouldn't have been assignable in the way you wrote.

 words = sentence;

Please consult this SO post with quotation from the C standard.

As of:

How To Assign char* to an Array variable ?

You can do it by populating your "array variable" with the content of string literal pointed to by char *, but you have to give it an explicit length before you can do it by copying. Don't forget to #include <string.h>

char* sentence = "Hello World";
char words[32];                //explicit length
strcpy (words, sentence);
printf ("%s\n", words);

Or in this way:

char* sentence = "Hello World";
char words[32];
size_t len = strlen(sentence) + 1;
strncpy (words, sentence, (len < 32 ? len : 31));
if (len >= 32) words[31] = '\0';
printf ("%s\n", words);

BTW, your main() should return an int.

Upvotes: 1

Flying disk
Flying disk

Reputation: 130

I guess you want to do the following:

#include <stdio.h>
#include <string.h>

int main()
{
char* sentence = "Hello World";

//sentence gets altered...

char *words = sentence;
printf("%s",words);

//code logic here...

return 0;

}

Upvotes: -1

AndersK
AndersK

Reputation: 36082

The statement

char* sentence = "Hello World";

Sets the pointer sentence to point to read-only memory where the character sequence "Hello World\0" is stored.

words is an array and not a pointer, you cannot make an array "point" anywhere since it is a fixed address in memory, you can only copy things to and from it.

char words[] = sentence; // error

instead declare an array with a size then copy the contents of what sentence points to

char* sentence = "Hello World";
char words[32];
strcpy_s(words, sizeof(word), sentence); // C11 or use strcpy/strncpy instead

The string is now duplicated, sentence is still pointing to the original "Hello World\0" and the words array contains a copy of that string. The array's content can be modified.

Upvotes: 0

sg7
sg7

Reputation: 6298

How To assign char* to an Array variable?

The code below may be useful for some occasions since it does not require copying a string or knowing its length.

char* sentence0  = "Hello World";
char* sentence1  = "Hello Tom!";

char *words[10]; // char *words[10] array can hold char * pointers to 10 strings

words[0] = sentence0;
words[1] = sentence1;

printf("sentence0= %s\n",words[0]);
printf("sentence1= %s\n",words[1]);

Output

sentence0= Hello World
sentence1= Hello Tom!

Upvotes: 0

Ed Heal
Ed Heal

Reputation: 59997

  1. You need to give the array words a length

    char words[100]; // For example
    
  2. The use strncpy to copy the contents

     strncpy(words, sentence, 100);
    
  3. Just in case add a null character if the string sentence is too long

     words[99] = 0;
    

Upvotes: 2

Niklas Rosencrantz
Niklas Rosencrantz

Reputation: 26647

I think you can do it with strcpy :

#include <memory.h>
#include <stdio.h>
int main()
{
    char* sentence = "Hello World";
    char words[12];
    //sentence gets altered...
    strcpy(words, sentence);
    //code logic here...
    printf("%s", words);
    return 0;
}

..if I didn't misunderstand. The above code will copy the string into the char array.

Upvotes: 0

Related Questions