Ir ao conteúdo
  • Cadastre-se

C concatenação de string com comando


Posts recomendados

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

int main()
{
	char a[20]= "dog";
    char s[20];
    strcpy (s,"printf(\"%s\",a);");
    s;
}
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char s[20];
    sprintf(s,"printf(\"%s\",s);");
    system(s);
}

 

adicionado 12 minutos depois

.

Link para o comentário
Compartilhar em outros sites

Isso que você quer é impossível do jeito que pensou em fazer.

Se quiser rodar um comando, vai ter de implentar algo mais realista. Tipo, um if else if que seleciona qual comando executar, ou ainda, se você quiser mostrar mais serviço, faça um parser de strings que vasculha a string e roda o comando pelo nome dele com base no conteúdo da string. Igualzinho funções de interpretador, tipo, lua, python, etc e tal.

Link para o comentário
Compartilhar em outros sites

Para concatenar strings faça assim:

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

int main() {
    char string1[20];
    char string2[40];

    strcpy(string1, "String 1");
    strcpy(string2, "String 2");

    strcat(string1, string2);    // string1 recebe string2 no final

    printf("String 1: %s \n", string1);
    printf("String 2: %s \n", string2);

    return 0;
}

 

  • Curtir 1
  • Obrigado 1
  • Haha 1
Link para o comentário
Compartilhar em outros sites

14 minutos atrás, Herbertbahia disse:

armazenar o comando na string que até conseguir. mas não consigo chamar o comando por outro comando ex system(comando); ex: se eu por printf(s) imprime outra coisa

 

system() é só isso. Recebe um char* e envia para o sistema. Recebe o código de retorno ao final  e devolve -1 se deu erro ou o status de retorno do comando se deu certo. Não é nada especialmente útil. As funções mais importantes estão disponíveis para uso direto pelo programa C, e para usar como interpretador de comandos um programa em C eis o que posso dizer:

Em resumo: se você faz um programa em C que chama system() pra fazer algo não está fazendo nada: apenas está criando um intermediário para executar comandos e os sistemas já tem intermediários excelentes para fazer isso.

char* Adeus = "shutdown -t 0 now";
int n = system(Adeus);
int i = 0;

itn main()
{
    while(1) 
    {
        printf("%d: Ainda estou aqui\n");
        i++;
    }
}

Vai ver uma contagem na tela até sua máquina desligar se sua conta tiver essa permissão. E para que?

 

 

 

 

adicionado 1 minuto depois

Não fui justo ao dizer "agora tem o PowerShell": isso tem uns 20 anos, se contar o tempo dos objetos nos scripts em VBS que manipulavam coisas do sistema

adicionado 2 minutos depois

Poste um exemplo do que quer fazer e  assim podemos te ajudar

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@arfneto entendir o que quis dizer. Bem acho que estou procurando metodos ageis de programacao em c so isso.

adicionado 14 minutos depois
14 minutos atrás, Herbertbahia disse:

@arfneto entendir o que quis dizer. Bem acho que estou procurando metodos ageis de programacao em c so isso.

o que me diz sobre isso?como faço?

#include <stdio.h>
#include <stdlib.h>
#define printf printf("dog");   

int main()
{
    printf:
}

  • Curtir 1
  • Confuso 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, Herbertbahia disse:

@arfneto entendir o que quis dizer. Bem acho que estou procurando metodos ageis de programacao em c so isso.

adicionado 14 minutos depois

o que me diz sobre isso?como faço?

#include <stdio.h>
#include <stdlib.h>
#define printf printf("dog");   

int main()
{
    printf:
}

 

Entendo. O que eu quis  dizer foi que usar system() para fazer algo dificilmente vai trazer agilidade porque os interpretadores de comando do Unix e do Windows são muito bons, refinados por décadas por alguns dos melhores caras do mundo nessas coisas, e assim um script é mais ágil. Um programa para gerar uma string e chamar system(), que tem que ser compilado e instalado, não acrescenta muito. 

 

Em casos em que precisa realmente interagir com o sistema e a performance é importante e envolve algum recurso especial, aí pode usar as funções do sistema e chamar os serviços do próprio sistema operacional em seu programa em C. E não chamar system() para chamar o sistema.


Lembre-se que praticamente tudo nos Unix/Linux/MacOS/Android e nos Windows foi escrito em C. E assim por certo tem funções em C para tudo no sistema

 

Uma vez em que eu precisei disso: copiar arquivos de uma pasta para outra, incluindo subdiretórios. Claro, os sistemas tem comandos para isso, mas eu precisava copiar tudo o que fosse possível de um disco defeituoso e então queria seguir adiante a cada erro e ir copiando tudo que fosse possível e depois ir voltando aos arquivos com problema e tentando outras maneiras, até acabar tentando salvar partes deles, e criando um arquivo descrevendo como as coisas estavam indo, com data e hora. Não tem como fazer isso com  os comandos do sistema porque eles seguem pela ordem, acabam cancelando ou abrindo mensagens na tela perguntando se vai continuar e tal. Aí talvez se justifique criar um programa em C que vai rodar por dois dias sem ficar perguntando nada na tela e dizendo depois o que ele andou fazendo. No geral basta usar o sistema e scripts

 

Sobre o trecho de código

 

Acho que devia abrir um tópico novo ao mudar de assunto

#include <stdio.h>
#include <stdlib.h>
#define printf printf("dog");   

int main()
{
    printf:
}

Em stdio.h está declarada printf() então acho que um #define para printf é pedir por problemas. Como acha que isso ia funcionar? O preprocessador roda antes do compilador --- de onde vem o pre- de preprocessador --- para processar os #define #ifdef e #include e tal. E você precisa do header stdio.h porque precisa compilar as ocorrências de printf. TODAS. Use outro nome.

E tire aquele ":" de lá também.

Algo assim estaria bem

#define coisa  printf("dog");
#include "stdio.h"
int main()
{
    coisa
    return 0;
}

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Bh7Bu7xiFIGUfl4ggmxwl70Sbs3VkMj5WKJDuP5c

printf() não o local e o nome de um programa!

 

15 horas atrás, Herbertbahia disse:

#include <stdio.h>
#include <stdlib.h>
int main()
{ 
 char s[20]; 
 sprintf(s,"printf(\"%s\",s);"); 
 system(s);
}

Entendo plenamente!


13 horas atrás, Herbertbahia disse:

armazenar o comando na string que até conseguir. mas não consigo chamar o comando por outro comando ex system(comando); ex: se eu por printf(s) imprime outra coisa.

 

Não deu certo por quê

Você só não conseguiu porque printf e outras funções literais não são identificadores (nomes e locais) de programas.

 

O que é a função system

system é um função na linguagem que invoca PROGRAMAS que são instruções próprias para um computador.

 

E funções

Funções na linguagem são instruções genéricas que precisam antes serem traduzidas para o entendimento do computador, suas traduções são os programas.

 

O que preciso saber + 

Somente isso. 

 

***

Obrigado.

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

2 horas atrás, Herbertbahia disse:

@arfneto Obrigado vezes loop infinito. Kkkk

 

Olá

 

Não tenho ideia de porque quer usar um #define nesse caso, mas veja esse exemplo com cuidado .Pode ser bem mais útil

 

Esse é o resultado

valor de teste:2
valor de valor:-328

Deste programa

#define coisa(algo) printf("valor de " #algo ":%d\n", ##algo );
#include "stdio.h"
int main(int argc, char** argv)
{
	int teste = 2;
	int valor = -328;
	coisa(teste)
	coisa(valor)
	return 0;
}

#define pode ter parâmetros então você pode usar como está ai. 

 

Considere que

  • O preprocessador passa uma única vez pelo texto
  • O preprocessador trata texto então o resultado pode não fazer sentido na hora de compilar
  • Muita  atenção com expressões
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...