You're saying you have this:
char array[20]; char string[100];
array[0]='1';
array[1]='7';
array[2]='8';
array[3]='.';
array[4]='9';
And you'd like to have this:
string[0]= "178.9"; // where it was stored 178.9 ....in position [0]
You can't have that. A char holds 1 character. That's it. A "string" in C is an array of characters followed by a sentinel character (NULL terminator).
Now if you want to copy the first x characters out of array to string you can do that with memcpy():
memcpy(string, array, x);
string[x] = '\0';
Answer from Mike on Stack OverflowYou're saying you have this:
char array[20]; char string[100];
array[0]='1';
array[1]='7';
array[2]='8';
array[3]='.';
array[4]='9';
And you'd like to have this:
string[0]= "178.9"; // where it was stored 178.9 ....in position [0]
You can't have that. A char holds 1 character. That's it. A "string" in C is an array of characters followed by a sentinel character (NULL terminator).
Now if you want to copy the first x characters out of array to string you can do that with memcpy():
memcpy(string, array, x);
string[x] = '\0';
Assuming array is a character array that does not end in \0, you will want to use strncpy:
char * strncpy(char * destination, const char * source, size_t num);
like so:
strncpy(string, array, 20);
string[20] = '\0'
Then string will be a null terminated C string, as desired.
Videos
I know that a string is already technically an array of chars, but when I try to use toupper(string), it doesn’t work because toupper is designed to capitalize chars and not strings, per the documentation. I’ve been making it overly complicated and it’s stressing me out. So to start, I created an “int N=strlen(string);”, then created an array that’s “char upper[N];”. Then I write a for loop written as(please forgive the terrible syntax I’m about to write), “for (int i = 0; i < N; i++) { toupper(upper[j]); }”. What am I doing wrong?
Hello everyone!
In this simple example, how can I replace the new_key string contents with the uppercase of the key string? I can print it alright with the below code, but can't find a way to store the characters in the empty string - there are always either segmentation fault errors or initializer ones.
What would be the best way to make new_key[i] be the content of toupper(key[i])?
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
string key = "abcde";
string new_key[] = "";
for (int i = 0, len = strlen(key); i < len; i++)
{
char c = key[i];
printf("%c", toupper(c));
}
}
The string class has a constructor that takes a NULL-terminated C-string:
char arr[ ] = "This is a test";
string str(arr);
// You can also assign directly to a string.
str = "This is another string";
// or
str = arr;
Another solution might look like this,
char arr[] = "mom";
std::cout << "hi " << std::string(arr);
which avoids using an extra variable.