简体   繁体   中英

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.

  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; 

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 .

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.

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!

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.

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.

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;

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM