Jump to content
Sign in to follow this  
Seabra

Preencher string bidimensional

Recommended Posts

Seabra

Boas,

 

Este código não funciona, no entanto tentei de diversas formas.

Estou a tentar criar e preencher uma string bidimensional para pode posteriormente manobrar caracter a caracter e linha a linha.

Também pretendo criar a abecedário desta forma. 

O Printf é só para testes e imprimir a linha 0.

Podem-me ajudar na melhor forma de o fazer?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{

char letrah[9][10];


letrah[0]="   ##   ";
letrah[1]="  #  #  ";
letrah[2]="#      #",
letrah[3]="#      #",
letrah[4]="########",
letrah[5]="#      #",
letrah[6]="#      #",
letrah[7]="#      #"



printf("\n valor: %s",&letrah[0]);


    return 0;
}

obrigado

Share this post


Link to post
Share on other sites
HappyHippyHippo

ignorando a nomenclatura usada, o teu problema esta no método de copia de strings.

o que pretendes e realizado usando a função strcpy


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
HappyHippyHippo

não, mas posso exemplificar num código genérico:

char buffer[20];
strncpy(buffer, "string", 20);

 

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Seabra

Já tentei reconstruír o código mas aparecem coisas estranhas:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{

char buffer[8][8];
int a;


strncpy(buffer[0], "   ##   ", 8);
strncpy(buffer[1], "  #  #  ", 8);
strncpy(buffer[2], "#      #", 8);
strncpy(buffer[3], "#      #", 8);
strncpy(buffer[4], "########", 8);
strncpy(buffer[5], "#      #", 8);
strncpy(buffer[6], "#      #", 8);
strncpy(buffer[7], "#      #", 8);

printf("\n valor: %s",&buffer[0][0]);
printf("\n valor: %s",&buffer[1][0]);
printf("\n valor: %s",&buffer[2][0]);
printf("\n valor: %s",&buffer[3][0]);
printf("\n valor: %s",&buffer[4][0]);
printf("\n valor: %s",&buffer[5][0]);
printf("\n valor: %s",&buffer[6][0]);
printf("\n valor: %s",&buffer[7][0]);

    return 0;
}

O resultado é este:


 valor:    ##     #  #  #      ##      ##########      ##      ##      #( (
 valor:   #  #  #      ##      ##########      ##      ##      #( (
 valor: #      ##      ##########      ##      ##      #( (
 valor: #      ##########      ##      ##      #( (
 valor: #########      ##      ##      #( (
 valor: #      ##      ##      #( (
 valor: #      ##      #( (
 valor: #      #( (
Process returned 0 (0x0)   execution time : 0.013 s
Press any key to continue.

Estou a ver que em C não é fácil trabalhar com strings!

A quem me poder ajudar

Obrigado

Share this post


Link to post
Share on other sites
HappyHippyHippo

em C string são fácies se tiveres em mente uma e uma única coisa :

Quantos bytes necessitas para guardar a string "123" ?

 

ps . eu tenho isso a correr bem :P

$ ./app.exe

 valor:    ##
 valor:   #  #
 valor: #      #
 valor: #      #
 valor: ########
 valor: #      #
 valor: #      #
 valor: #      #

 

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Seabra

1 byte por cada caracter. Penso que é isso. Para guardar o nº 123 necessito só de 1 byte.

Mas no cod blochks continua a dar esse lixo todo.

Necessito mesmo de ajuda ou de uma explicação para o sucedido.

Obrigado

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

não percebo a tua resposta ... primeiro dizes que necessitas de um byte por caracter e depois dizes que para guardar 3 caracteres basta 1 ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Seabra

Se for string é 1 byte por caracter+1 para terminação, no caso da string "123" necessito de 3 bytes+1 para terminação. Se for inteiro e neste caso para 123 necessito de 1 byte.

Podias-me ter alertado para o byte de terminação, não era!!

De qualquer modo já resolvi.

Obrigado 

Share this post


Link to post
Share on other sites
HappyHippyHippo
8 hours ago, Seabra said:

Podias-me ter alertado para o byte de terminação, não era!!

estás a confundir o que fiz : fazer o teu trabalho ou empurrar para a direcção correcta.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
HappyHippyHippo
12 hours ago, Seabra said:

Faltava inicializar as variáveis corretamente.

Obrigado.

 

a variavel estava correctamente inicializada, o problema era mesma o tamanho na sua declaração


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.