Ir ao conteúdo

[partilha de codigo] - quem disse que não podemos atribuir directamente string?


Cambalinho

Posts recomendados

Postado

quem disse que nao podemos atribuir strings, esta muito enganado;)

eu fiz 1 funçao e faço alteraçao de nome com 1 macro:

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

char *CopyString(char *String)
{
return String;
}

#define CopyString(x) (x);//os parenteses sao importantes para expressoes complexas;)
int main()
{
char Nome[10],*Nome2, *Nome3;
printf("Insert your name:\n");
scanf("%s",Nome);
Nome2="Hello";
Nome3=Nome;
printf("%s %s\n",Nome2, Nome3);
return 0;
}

a partir de agora podem atribuir strings;)

(aceito criticas)

Postado

Nesse código você não está atribuindo string, mas o endereço de um vetor de caracteres.

Em Nome2 = "Hello", as aspas são como o endereço do inicio do vetor de caracteres

Já em Nome3=Nome, seria o mesmo que Nome2 = &Nome[0]

Ou seja, também está atribuindo o endereço do primeiro elemento.

Postado
Nesse código você não está atribuindo string, mas o endereço de um vetor de caracteres.

Em Nome2 = "Hello", as aspas são como o endereço do inicio do vetor de caracteres

Já em Nome3=Nome, seria o mesmo que Nome2 = &Nome[0]

Ou seja, também está atribuindo o endereço do primeiro elemento.

mas diz lá: nao foi bem pensado para ser mais fácil atribuir strings?

Postado

Como eu falei, você não atribuiu string.

Se você acrescentar essa linha antes do printf

 Nome[0] = 'X';

Vai ver que o conteúdo apontado por Nome3 será alterado... Pois estão apontando para o mesmo endereço.

Se quiser criar uma função que torna mais simples a cópia de uma string, pode fazer algo assim.


char *string(const char *texto){
int i;
char *novo;

for(i = 0; texto[i] != '\0'; i++);

novo = (char*)malloc(i++);

strcpy(novo, texto);

return novo;
}

Dessa forma não teríamos o problema de duas variáveis apontar para o mesmo endereço.

A atribuição de um caractere para 'novo_nome' não interfere na string 'nome' e vice versa


char nome[10], *novo_nome;

novo_nome = string(nome);

novo_nome[0] = 'X';

nome[0] = 'Y';

Postado

Fiz algumas alterações e deixei a função string mais compacta.


char *string(const char *texto){
int i;

for(i = 0; texto[i] != '\0'; i++);

return strcpy((char*)malloc(i++), texto);
}

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...