/ / Pouvez-vous attribuer une chaîne de 2 chaînes? - c

Pouvez-vous attribuer une chaîne de 2 chaînes? - c

Je suis encore nouveau ici, mais j’ai trouvé la raison pour laquelle j’étais persuadé que l’inférieur n’était pas réalisable.

J'essaie d'attribuer à foobar la valeur de "Hello there! N". Soit cela ne peut être fait, soit j'ai du mal à comprendre.

EDIT: Je dois préciser que je cherche pourquoi le système ci-dessous ne fonctionne pas et non une des nombreuses solutions qui peuvent le remplacer.

MODIFIER: J'ai pris la réponse de "Vous ne pouvez pas concaténer des chaînes de caractères variable en c de cette façon." Probablement parce qu'il était trop difficile d'écrire l'analyseur pour autoriser le chemin ci-dessous. Je suis trop nouveau pour savoir ce qui est différent et trop nouveau pour être aussi inquiet. Si quelqu'un trouve une raison formelle de citer, merci de la poster.

#include <stdio.h>

int main()
{

char *foo = "Hello";
char *bar = " there!n";
const char *foobar = (*foo) *bar;

printf("%s", foobar);

return 0;

}

Cela ne semble pas que cela devrait être un problème.

Réponses:

11 pour la réponse № 1

Vous ne pouvez pas concaténer des chaînes de caractères dans c de cette manière.

Vous avez besoin d'un espace mémoire dans lequel vous allez copier les deux chaînes dans cette mémoire.

L’espace mémoire pourrait être un tampon statique comme char foobar[100]si vous savez déjà que la taille de vos chaînesne peut pas être plus grand que la taille définie. Ou bien la mémoire peut être un tampon dynamique si vous ne connaissez pas la taille limite de votre chaîne, comme indiqué dans l'exemple suivant

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

int main()
{

char *foo = "Hello";
char *bar = " there!n";
char *foobar = malloc(strlen(foo) + strlen(bar) + 1);
strcpy(foobar,foo);
strcat(foobar,bar);
printf("%s", foobar);

return 0;

}

Si vous allouez de la mémoire avec malloc() alors n'oubliez pas de libérer le foobar mémoire quand il devient inutile dans votre programme avec

free(foobar);

3 pour la réponse № 2

En C, les chaînes ne peuvent "pas être concaténées avec votre façon de faire. Une façon possible de reproduire ce que vous essayez de faire est d’utiliser le pré-processeur:

#include <stdio.h>
#define FOO "foo"
#define BAR "bar"

int main()
{
char *foo = FOO;
char *bar = BAR;
const char *foobar = FOO BAR;

printf("%s", foobar);

return 0;
}

2 pour la réponse № 3

Répondre à la question "édité":

Cela ne marche pas parce que le langage C en tant que tel n’a pas la connaissance de concaténer des chaînes strcat ou une autre fonction. En outre, le compilateur ne sait pas où mettre la chaîne en mémoire, car il ne peut pas utiliser le stockage pour "foo" et "bar" pour stocker la chaîne résultante.

Bien sûr, en C, le sens de *foo dans votre code est la lettre "H", et *bar se transforme en " ". Alors (*foo) *bar devient ("H") " " qui n'a absolument aucune signification utile en C.


1 pour la réponse № 4

Votre code est probablement compilé sans problème, mais il y a des erreurs possibles.

Les deux premières déclarations char * (ou string) sontlégitime. Le troisième pas beaucoup. Vous transcrivez (* bar) en tant que * foo, qui n'est pas un type de données, mais une variable, et vous définissez foobar sur la valeur convertie de foo, au lieu de faire une concaténation de chaînes.

C ne "fait pas la concaténation de chaînes avec des opérateurs. Vous devez plutôt utiliser des bibliothèques spécifiques pour concaténer des chaînes ou créer vos propres fonctions. Pour les chaînes, vous avez string.h

Pour ce cas particulier, vous avez strcat: Il faut deux chaînes et retourne une nouvelle chaîne avec la concaténation de ces deux chaînes.

Donc, pour votre exemple:

char *foo = "Hello";
char *bar = " there!n";
const char *foobar = malloc((strlen(foo)+strlen(bar))*sizeof(char));
foobar = strcat(foo,bar);

Quelque chose comme ça.

J'espère que cela t'aides.