✧ Descrição do tutorial
Olá, pessoal, com certeza está uma noite tranquila e agradável, ou pelo menos está na composição deste tutorial. Então, ei, que tal marcar junto para enriquecer e / ou se envolver com o foco principal deste artigo, e como o título sugere, vamos focar em "Manipulação de cordas" no peão, passaremos pelo intermediário absoluto coisas que todos devem estar cientes de algum tipo de dicas avançadas, inteligentes e eficazes.
✧ O que é formatação de string?
Em geral, formatar um texto é o ato de manipulá-lo para melhorar visualmente sua legibilidade, seja mudando a família da fonte, cor, peso e assim por diante.
Strings sendo uma matriz de caracteres (alfabetos, números, símbolos), que não chamaríamos especificamente de um texto em si, mas são referidos como tal quando exibidos, podem ser processados com a mesma abordagem, mas, infelizmente, a interpretação de SA-MP do peão não permite muito (ainda? Talvez nunca), em geral mudar a cor é o mais longe que podemos conseguir, sim, você ainda pode alterar / personalizar a fonte, mas isso é apenas do lado do cliente, e sim,GTA San Andreas( o jogo pai) fornece algumas fontes extras, mas isso só funciona emdesenhosdetextoe gametext , isso causa limitações em relação à apresentação do texto, mas ei, já se passou mais de uma década e sobrevivemos muito bem.
✧ Declaração de string
Como eu disse antes, strings são basicamente arrays de caracteres, então eles são usados da mesma forma que os arrays, e assim como criaríamos um array, faríamos para strings seguindo este formato; string_name [string_size].
string_name: o nome da matriz de caracteres (por exemplo, string, str, mensagem, texto ... etc. contanto que seja um nome de variável válido (começa com um caractere ou um sublinhado)).
string_size: o máximo de caracteres que esta string teria.Você também pode predefinir valores constantes para que possa usá-los várias vezes como tamanhos de string.Código:// declarando uma string de 5 caracteres. novo str_1 [5]; // declarando uma string de 100 caracteres. novo str_2 [100];Em tempo de compilação, o compilador irá substituir todas as ocorrências de STRING_SIZE com o valor 20, este método economiza tempo e é mais legível na maioria dos casos, tenha em mente que o valor que você atribui à constante STRING_SIZE deve ser um inteiro ou então ele dará um erro de compilação.Código:// declarando uma constante. # define STRING_SIZE 20 // declarando uma string com o tamanho do valor de STRING_SIZE. novo str_3 [STRING_SIZE];
Além das constantes predefinidas, você pode realizar operações básicas, o módulo ( % ), no entanto, fornecerá erros de compilação se usado, você ainda pode se safar com cálculos de divisão ( / ), mas lembre-se de que dividir por 0 irá desencadear erros, o bônus aqui está, todos os resultados flutuantes serão arredondados automaticamente para você.Teoricamente, você pode criar matrizes ridiculamente enormes, mas o SA-MP coloca poucas restrições no comprimento das strings com as quais você pode trabalhar, dependendo do que você está trabalhando, ele limita o número de caracteres que você pode produzir normalmente.Código:// declarando uma constante. # define STRING_SIZE 26 // declarando strins com o uso da constante STRING_SIZE e alguns cálculos .. novo str_4 [STRING_SIZE + 4], str_5 [STRING_SIZE - 6], str_6 [9/3], str_7 [STRING_SIZE * 2];
✩ Limites de comprimento O
SA-MP limita os caracteres que podem ser armazenados em uma única string e evita que os criadores de scripts exagerem ao trabalhar com texto. Felizmente, não é tão ruim quanto pode parecer, a lista abaixo quebra alguns desses limites;
Entrada de texto O texto que você insere no bate-papo. 128 Saída de texto Texto que sai na tela do cliente. 144 Nome Apelido / nome de usuário do jogador. 24 String de desenho de texto Bastante autoexplicativo. 1024 Informação da caixa de diálogo O texto exibido em todos os diálogos do tipo DIALOG_STYLE_MSGBOX , DIALOG_STYLE_INPUT e DIALOG_STYLE_PASSWORD . 4096 Legenda da caixa de diálogo A legenda / título no topo da caixa de diálogo. 64 Entrada de diálogo A caixa de entrada em DIALOG_STYLE_INPUT e DIALOG_STYLE_PASSWORD . 128 Coluna de diálogo Os caracteres em cada coluna de DIALOG_STYLE_TABLIST_HEADER e DIALOG_STYLE_TABLIST . 128 Linha de diálogo Os caracteres em cada coluna de DIALOG_STYLE_TABLIST_HEADER , DIALOG_STYLE_TABLIST e DIALOG_STYLE_LIST . 256 Bolha de bate-papo A bolha do bate-papo que é exibida acima do crachá do jogador. 144 Título do menu O cabeçalho do menu nativo do GTA San Andreas (usado principalmente para lojas). 31 Item do menu Item / linha do menu nativo do GTA San Andreas (usado principalmente para lojas). 31
Se de alguma forma esses limites foram excedidos, poucos inconvenientes podem ocorrer, ele pode até mesmo travar / congelar o servidor em alguns casos ( por exemplo, strings de desenho de texto longas ), em alguns outros casos, o texto apenas truncaria como o título do Menu ( se atingir 32 caracteres, ele trunca de volta para 30 ) e itens.
Além dos limites estritos impostos às cordas, existem muitos outros a respeito de coisas diferentes, você pode ver a lista completa aqui .
✩ Atribuição de valores A
atribuição de valores a strings pode ser feita por vários métodos, alguns os atribuem na criação, outros depois, existem pessoas que usam loops, outras usam funções e, sim, existem aqueles que fazem este processo manualmente, slot por slot, não existe uma maneira exata ou errada de fazer isso, alguns métodos costumam ser mais eficazes em alguns casos do que outros, outros não; no final do dia, tudo o que importa é o desempenho, a otimização e a legibilidade.
Na maioria dos casos, você gostaria de dar um valor padrão para a string em sua criação, você pode fazer isso simplesmente como segue;Certifique-se de que o tamanho da string é maior do que o número de caracteres que você atribuiu, tendo um tamanho de string menor ou igual a isso, irá disparar erros de compilação, deixando o slot de tamanho entre os dois colchetes vazio ( como no exemplo message_2 ), dê automaticamente ao array o tamanho do texto que você atribuiu a mais 1, neste caso, 23 + 1 = 24 , por quê? Ele reserva um slot para o caractere nulo ( também conhecido como terminador nulo ), mais sobre isso depois, a palavra “Hello” tem 5 caracteres, então para armazená-lo em uma string, ele deve ter 6 células, 5 células para o contagem de caracteres da palavra e um para o caractere nulo.Código:nova mensagem_1 [6] = "Olá" , message_2 [] = "Esta é outra mensagem" ;
Vamos dar uma olhada em fazer o mesmo processo slot por slot manualmente, primeiro, definimos um novo array, você pode determinar seu tamanho ou deixá-lo vazio para o compilador preencher, ambos funcionariam bem, preencheremos o array com caracteres para criar a string “Hello” .Lá, atribuímos um caractere para cada slot no array message_3 , isso não funcionará se você declarar um sting sem tamanho definitivo, observe que para representar um único caractere, ele deve ser escrito entre duas aspas simples ( ' ), também, observe como começamos com o slot 0, e isso é natural, considerando como enfatizei como uma string é uma matriz de caracteres, o que significa que o primeiro slot é sempre 0 e o último tem seu tamanho menos 1 ( o caractere nulo não conta ), que neste caso é 4, contando de 0 a 4, o que o torna 5 caracteres, sendo o sexto o terminador nulo, mais sobre isso virá depois.Código:// Incluindo o tamanho da string em sua declaração, ou não funcionará de outra forma. nova mensagem_3 [6]; mensagem_3 [0] = 'H' ; mensagem_3 [1] = 'e' ; mensagem_3 [2] = 'l' ; mensagem_3 [3] = 'l' ; mensagem_3 [4] = 'o' ; message_3 [5] = '\ 0' ;
Você também pode atribuir números de strings que serão vistos como ASCII (um sistema que representa caracteres numericamente, abrange 128 caracteres variando de 0 a 127, mais sobre isso aqui ) código para um caractere, a mesma mensagem “Olá” pode ser atribuída usando código ASCII como este;E sim, você pode realizar operações numéricas com esses códigos da mesma forma que faz com números normais, afinal, a máquina vê os caracteres como meros números.Código:nova mensagem_4 [6]; mensagem_4 [0] = 72; // Representação ASCII de h maiúsculo, “H”. mensagem_4 [1] = 101; // Representação ASCII de “e”. message_4 [2] = 108: // representação ASCII de “l”. mensagem_4 [3] = 108; // Representação ASCII de “l”. mensagem_4 [4] = 111; // Representação ASCII de “o”. mensagem_4 [5] = 0; // Representação ASCII do terminador nulo.se você exibisse message_5 [0] , obteria B , estranho, certo? Bem, não, não realmente, você pode realizar outras operações básicas ( subtração, multiplicação, divisão até o módulo ), os números flutuantes serão arredondados automaticamente para você, vamos ver como isso funciona.Código:nova mensagem_5 [1]; mensagem_5 [0] = 65 + 1;
Você tem 65 + 1 , que retorna 66, verificando a tabela ASCII , você encontrará que 66 é a representação numérica do caractere “B” ( maiúsculo ). Portanto, o trecho acima é basicamente o mesmo que fazer, message_5 [0] = 'B' ;
Para referência, use esta tabela ASCII .
Você também pode realizar a mesma operação entre vários caracteres ou uma mistura de ambos, eles e números, aqui estão alguns exemplos;Pode ficar confuso às vezes se você nunca conheceu o sistema ASCII , basta um pouco de prática, porque entender como ele funciona é muito útil.Código:nova mensagem_6 [3]; mensagem_6 [0] = 'B' - 1; // Que é 66 - 1, retorna 65, a representação numérica de “A”. message_6 [1] = 'z' - '&' ; // Que é 122 - 38, retorna 84, a representação numérica de “T”. message_6 [2] = '0' + '1' ; // Que é 48 + 49, retorna a representação numérica de “a”, observe que '0' e '1' não são os números 0 e 1, mas sim caracteres.
O código ASCII não é exclusivo para números decimais, você também pode usar números hexadecimais ou binários da mesma maneira.Código:novo numString [4]; numString [0] = 0x50; // O número decimal 80 em hexadecimal, p maiúsculo, “P”. numString [1] = 0b1000001; // O número decimal 65 em binário, a maiúsculo, “A”. numString [2] = 0b1010111; // O número decimal 87 em binário, w maiúsculo, “W”. numString [3] = 0x4E; // O número decimal 78 em hexadecimal, n maiúsculo, “N”.
Agora vamos ver outra coisa, atribuir valores por meio de loops, é literalmente o mesmo que preencher um array por meio de loops, você também pode usar todos os tipos de métodos de loop, é o seguinte;Todos os três produzirão a mesma string exata, ABCDEFGHIJKLMNOPQRSTUVWXYZ .Código:// Vamos preencher esta string com letras maiúsculas. nova mensagem_7 [26]; // O loop for. para (novo i = 0; i <26; i ++) mensagem_7 [i] = 'A' + i; // O loop while. enquanto (i ++ < 'Z' ) mensagem_7 [i - 'A' ] = i; // O loop do-while. novo j = 'A' ; Faz { mensagem_7 [j - 'A'] = j; } while (j ++ <'Z'); // Você pode até usar goto para simular um loop, mas não é recomendado.
Se você achou os loops acima confusos, você pode querer dar uma olhada em como os loops funcionam, ou isso pode ser encontrado aqui e aqui .
Observe como usei caracteres em algumas condições lógicas, como (j ++ <'Z') que se traduz facilmente em (j ++ <90) , novamente, os caracteres são tratados como números, não se sinta estranho, você pode verificar o ASCII mesa sempre que desejar.
Digamos que você deseja preencher uma string com um número de um caractere específico, ( por exemplo, “AAAAAA”, “TTTTTT”, “vvvvvv”, “666” (não, não é uma coincidência)), a ideia típica que pode cruzar a maioria dos criadores de script é codificá-la, mas e quanto a strings longas, bem, que tal usar um loop, tudo bem também, mas e se eu dissesse que existe uma maneira ainda mais eficiente , assim como você preencheria um array com o mesmo valor, você faria o mesmo para strings.O código acima declara uma nova string chamada message_8 com 100 células ( variando de 0 a 99 ) e dá a cada slot o valor de 'J', que obviamente pode ser usado como um caractere J ou o número 74 de acordo com o sistema ASCII .Código:nova mensagem_8 [100] = { 'J' , ...};
Outra coisa que você pode fazer com isso é preencher a string com caracteres cujos valores são baseados em intervalos, veja o exemplo dos alfabetos em maiúsculas de A a Z acima? Vamos criar a mesma string usando este método.Quão fácil é isso ?! isto é mais otimizado e fácil de ler, e fornece os mesmos resultados que os 3 exemplos feitos usando métodos de loop acima, então como isso funciona exatamente? Bem, demos à string valores iniciais, 'A' e 'B', que são respectivamente 65 e 66, o compilador calcula o intervalo entre os dois valores, que neste caso é 1, e completa o preenchimento das células vazias com valores baseados nesse intervalo até preencher todo o array, você pode colocar como muitos valores iniciais como você deseja, mas considerará apenas o intervalo entre os dois últimos valores e trabalhará com base nele, lembre-se de que os valores iniciais são tratados como código ASCII, portanto, tente gerar intervalos numéricos usando este método em um string resultará em algo inconveniente, digamos que você declarou alguma string aleatória como esta;Código:nova mensagem_9 [26] = { 'A' , 'B' , ...};Idealmente, deve ter saída 151520 ( mais especificamente “1 5 15 20” ), mas em vez disso, saída; 159 = A , que é realmente a saída correta, por quê? Porque lembre-se, este é o código ASCII , '1' é 49 e '5' é 53 , o intervalo entre os dois é 4 (53 - 49) , a string aceita 5 caracteres, já ocupamos duas células quando incluímos o catálogo inicial, então isso deixa 3 células vazias que devem ser preenchidas respeitando o intervalo de 4, então é assim que funciona [49 | 53 57 61 65] , vamos substituir cada valor numérico por sua correspondência de código ASCII .['1' | '5' | '9' | '=' | 'A'] , faz mais sentido né ?!Código:new rand_str [5] = { '1', '5' , ...},
✩ O terminador nulo a que
me referi nas primeiras seções deste tutorial, espero que não tenha sido tão confuso no início, mas mesmo que fosse, vamos acabar com a confusão já, não se preocupe, não é nada difícil ou mesmo que avança, apenas um fato básico que você deve estar ciente, vou ser o mais breve possível, mas se você quiser uma visão mais aprofundada sobre isso, pode visitaresta página.
Então, o terminador nulo (também conhecido como caractere nulo), é um caractere presente em todas as strings, sua função é indicar que uma string terminou, você pode pensar nisso como um ponto final (.) Qualquer coisa que vier depois desse caractere é não contabilizado e completamente ignorado. Você não pode digitá-lo usando o teclado, mas pode consultar seu valor durante a codificação, ele está presente noNo entanto, a tabela ASCII , conhecida como NUL , representada pelo número 0.
Em peão , você pode digitá-la como seu valor numérico ou como um caractere '\ 0' . A barra invertida atua como um caractere de escape, ela está lá para dizer à máquina que esse caractere é o caractere nulo com o valor 0 e NÃO o caractere '0' que tem o valor 48.
Há um símbolo usado no peão , EOS , abreviação de E nd O f S tring, é uma macro predefinida para o terminador nulo, você pode definir o terminador nulo de várias maneiras diferentes;Como eu disse anteriormente no tutorial, você pode ignorar a atribuição do caractere nulo, mas ele está sempre lá nas células vazias, quando você declara uma nova string, todas as suas células são automaticamente ocupadas pelo terminador nulo, então, por exemplo, se eu for adiante e declare esta string text [3] , todas as suas células recebem o valor 0 por padrão, aqui está uma representação visual simples do conteúdo da string;Código:mensagem_9 [0] = 0; message_9 [0] = '\ 0' ; mensagem_9 [0] = 0b; // O número decimal 0 em binário. mensagem_9 [0] = 0x00; // O número decimal 0 em hexadecimal. mensagem_9 [0] = _: 0,0; // O número flutuante 0.0, temos que prefixá-lo com o detag '_' para evitar erros de compilação. mensagem_9 [0] = falso ; mensagem_9 [0] = EOS;
Células 0 1 2 Código ASCII 0 1 2 Personagens '\ 0' '\ 0' '\ 0'
Aqui está outro exemplo de uma string pré-preenchida.Aqui está o conteúdo da string por célula;Código:new text_1 [8] = "Olá" ;
Células 0 1 2 3 4 5 6 7 Código ASCII 72 101 108 108 111 0 0 0 Personagens 'H' 'e' 'eu' 'eu' 'o' '\ 0' '\ 0' '\ 0'
Se você, por exemplo, quiser deletar o conteúdo desta string, você pode simplesmente fazer isso usando um dos três exemplos abaixo;Passar a sequência por uma varredura de raio-X imprimirá o seguinte;Código:text_1 [0] = 0; text_1 [0] = EOS; text_1 [0] = '\ 0' ;
Células 0 1 2 3 4 5 6 7 Código ASCII 72 101 108 108 111 0 0 0 Personagens '\ 0' 'e' 'eu' 'eu' 'o' '\ 0' '\ 0' '\ 0'
Se você tentar imprimir esta string, tudo além do slot número 0 será ignorado e, portanto, rotulado como uma string vazia, até mesmo a função strlen retornará 0, pois depende da colocação do caractere nulo para recuperar o comprimento da string.
✧ Funções de manipulação de string
Quando se trata de trabalhar com vários pedaços de texto, opeãotem o que você precisa, ele fornece algumas funções muito básicas que fazem o trabalho de forma eficiente, sem necessidade de criar as suas próprias quando você tem suporte nativo que garante velocidade e otimização.
Estas são algumas funções com suporte nativo (retiradas de string.inc);Vamos dar uma olhada em alguns deles, os que são usados com mais frequência.Código:strlen nativo ( string const []); strpack nativo (dest [], const source [], maxlength = sizeof dest); strunpack nativo (dest [], fonte const [], maxlength = sizeof dest); strcat nativo (dest [], fonte const [], maxlength = sizeof dest); strmid nativo (dest [], const source [], start, end, maxlength = sizeof dest); bool nativo : strins (string [], const substr [], pos, maxlength = sizeof string); nativo bool : strdel (string [], início, fim); strcmp nativo ( const string1 [], const string2 [], bool : ignorecase = false, length = cellmax); strfind nativo ( const string [], const sub [], bool : ignorecase = false, pos = 0); strval nativo ( const string []); valstr nativo (dest [], valor, bool : pack = false); bool nativo : ispacked ( const string []); uudecode nativo (dest [], fonte const [], maxlength = sizeof dest); uuencode nativo (dest [], fonte const [], numbytes, maxlength = sizeof dest); memcpy nativo (dest [], fonte const [], índice = 0, numbytes, maxlength = sizeof dest);
-A função strlen ( this e sizeof são coisas completamente diferentes ), que leva uma string como parâmetro, retorna o comprimento dessa string ( o número de caracteres que ela tem ), mas preste atenção porque isso é um pouco complicado em como funciona , Eu disse antes no tutorial, esta função depende da posição do caractere nulo para determinar o comprimento da string, então qualquer outro caractere não nulo válido que vier depois não será contado, assim que o primeiro o caractere nulo é alcançado, a função retorna o número de células desde o início até esse caractere nulo.
-O strcatconcatena strings entre si, leva 3 parâmetros.Se tivéssemos que imprimir str_dest , ele mostraria Hello World , as duas strings foram adicionadas uma à outra e o resultado foi armazenado em str_dest , “Hello” + “World” = “Hello World” , observe como incluímos esse espaço em a segunda string, sim, os espaços são os próprios caracteres, de acordo com a tabela ASCII, seu valor é 32, se não tivéssemos adicionado o espaço, a string resultante teria sido HelloWorld .Código:new str_dest [12] = "Olá" , str_source [7] = "Mundo" ; strcat (str_dest, str_source);
-o strvalfunção irá converter uma string em um número, por exemplo, a seguinte string, "2017" será convertida no número 2017, isso funciona em números com e sem sinal, se a string não tiver caracteres numéricos, a função retornará 0, o o mesmo acontece se a string tem um caractere numérico, mas começa com caracteres não numéricos, se uma string começa com caracteres numéricos, mas inclui também caracteres não numéricos, os caracteres numéricos ainda serão recuperados e convertidos, aqui estão alguns casos de uso;Existem muitas bibliotecas feitas pela comunidade que você pode baixar que têm a ver com manipulação de strings, não consigo pensar em uma inclusão melhor do que strlib .Código:strval ( "2018" ); // Retorna “2018”. strval ( "-56" ); // Retorna “-56”. strval ( "17,39" ); // Retorna “17”, o número flutuante 17.39 foi auto-nivelado para nós. strval ( "nenhum número aqui" ); // Retorna “0”. strval ( "6 começa" ); // Retorna “6”. strval ( "aqui vamos nós, 2018" ); // Retorna “0”. strval ( "2017 encerrado, bem-vindo 2018" ); // Retorna “2017”.
✧ A função de formatação
Esta é provavelmente a função relacionada a string mais usada na comunidade, muito simples e amigável, tudo o que ela faz é formatar pedaços de texto e juntá-los, pode ser implementada em várias situações, como vincular variáveis e strings juntas, incorporando cores, adicionando quebras de linha ... etc.A função de formato leva como parâmetros a matriz de saída, seu tamanho ( número de células ), a string de formatação ( pode ser pré-armazenada em outra matriz ou atribuída diretamente de dentro da função ) e, finalmente, alguns parâmetros opcionais, que podem ser variáveis de diferentes tipos.Código:formato (saída [], len, formato const [], { Float , _ }: ...)
Vamos usar esta função para atribuir um valor a uma string vazia.A saída de formatMsg é Hello , lembre-se de que essa é uma maneira ruim de atribuir valores a strings, principalmente por causa de sua velocidade, existem métodos melhores para fazer isso, já discutimos alguns deles nos estágios iniciais deste tutorial.Código:novo formatMsg [6]; formato (formatMsg, 6, "Olá" );
Lembre-se de sempre colocar o tamanho correto do array, caso contrário, ele ainda funcionará, mas entrega algum comportamento indesejado, a função de formato irá transbordar o tamanho do seu array, e acredite em mim, você não quer que isso aconteça, se você não quer se preocupar em colocar o tamanho de string correto toda vez que quiser trabalhar com esta função, você pode simplesmente usar a função sizeof ( não é uma função em si, mas sim uma diretiva do compilador), vimos anteriormente uma função chamada strlen que retorna o número de caracteres que uma string possui ( excluindo e parando no caractere nulo ), mas esta retorna o tamanho da matriz, em outras palavras, o número de células dessa matriz possui, sejam preenchidos com caracter válido ou não, neste caso, 6.O texto deve estar sempre entre aspas duplas, porém, existe uma forma incomum de inserir texto, raramente usada, usa o símbolo de sinal numérico ( # ) e funciona da seguinte maneira.Código:novo formatMsg [6]; format (formatMsg, sizeof (formatMsg), "Hello" );Ele suporta espaços, caracteres de escape e você pode até mesmo usar a combinação de aspas duplas e o sinal de número;Código:novo formatMsg [6]; format (formatMsg, sizeof (formatMsg), #Hello );O código acima irá inserir Hello World , este método de inserção de strings é mais conhecido por ser usado com constantes predefinidas.Código:novo formatMsg [6]; format (formatMsg, sizeof (formatMsg), "Hello" #World );
Vamos dar uma olhada neste exemplo de uso de duas constantes predefinidas diferentes, uma sendo um inteiro 2017 , a outra sendo uma string "2018" .Isso produzirá Isto é 2018, não 2019 , a razão pela qual enfatizei que as duas constantes são de tipos diferentes é o uso do sinal numérico ( # ), se o valor NÃO for uma string, então você deve prefixá-lo com o número sinal ( #THIS_YEAR ) então será tratado como “2018” , ou então você obterá alguns erros de compilação, como para um valor de string, você pode escolher incluir ou omitir o sinal de número, porque funcionará de qualquer maneira ( NEW_YEAR é igual a #NEW_YEAR ). Você só pode usar isso para recuperar valores de constantes predefinidas, não funcionará com variáveis regulares, ou arrays / strings, já que o tratamento pode ser feito usando espaços reservados, mais sobre isso mais tarde.Código:#define THIS_YEAR 2018 // Esta constante tem um inteiro como seu valor. #define NEW_YEAR "2019" // Esta constante tem uma string como valor. novo formatMsg [23]; format (formatMsg, sizeof (formatMsg), "Este é" #THIS_YEAR ", não" NEW_YEAR);
Você também pode alinhar quantas aspas duplas quiser, uma ao lado da outra, embora não faça sentido, pois é mais natural apenas escrever uma frase em um único par de aspas duplas, aqui está um exemplo da mesma frase escrito em ambos os conceitos;Ambos produzirão a mesma frase, Esta é a realidade ... ou será ?! .Código:novo formatMsg [29]; // Um único par de aspas duplas. format (formatMsg, sizeof (formatMsg), "Isso é realidade ... ou é ?!" ); // Vários pares de aspas duplas. format (formatMsg, sizeof (formatMsg), "Esta é a realidade" "..." "ou é ?!" );

0 Comentários