2016-09-19 4 views
0

Можем ли мы добавить одну и ту же строку перед каждым символом в другой строке в LoadRunner?Добавлять одну строку перед каждым символом в другой строке

Если я дам вход как:

char *s1 = "Hello"; 
char *s2 = "\\x"; 

Я хочу напечатать на выходе, как: "\xH\xe\xl\xl\xo"

Не могли бы вы помочь.

+1

Подсказка: ваша строка C представляет собой массив символов. Используйте свои навыки программирования в фундаменте, чтобы ходить по массиву и строить соответствующую строку. –

+0

Спасибо #James. Что, если моя строка похожа: 'char * s1 =" 1.21.32 ";' 'char * s2 =" \\ x "; ' и если я хочу, как показано ниже: ' '\ x1 \ x. \ X2 \ x1 \ x. \ X3 \ x2" ' –

+1

Точно так же. – Henningsson

ответ

0

Что-то вроде:

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

int main(int argc, char *argv[]) 
{ 
    const char *s1 = "Hello"; 
    const char *s2 = "\\x"; 
    int s1_len = strlen(s1); 
    int s2_len = strlen(s2); 
    char *result, *p; 

    p = result = (char *)malloc(sizeof(char) * (s1_len + s1_len * s2_len + 1)); 

    for (int i = 0; i < s1_len; i++) { 
     p = mempcpy(p, s2, s2_len); 
     *p++ = s1[i]; 
    } 
    *p = '\0'; 

    puts(result); 
    free(result); 
    return 0; 
} 

Compile & пробег:

gcc test.c -o test -std=gnu99 && ./test 
\xH\xe\xl\xl\xo 
+1

Предложите упрощение 'p = result = malloc (s1_len + s1_len * s2_len + 1);' – chux

+0

Не похоже, что 'p' сильно продвигается, только +1 за цикл. Кроме того, непонятно, какой код свободен, когда это делается. – chux

+0

mempcpy() возвращает указатель на байт после последнего написанного байта. Вот почему p продвигается s2_len + 1 за цикл. –

0

Серия strcpy() с получает то, что вам нужно

size_t len1 = strlen(s1); 
size_t len2 = strlen(s2); 

char* res = malloc(len1 * (len2+1) + 1); 
res[0] = '\0'; 
size_t pos = 0; 
for (const char *p = s1; *p; ++p, pos += (len2+1)) { 
    // append s2 to the string 
    strcpy(&res[pos], s2); 
    // append the next character 
    strncpy(&res[pos+len2], p, 1); 
    // add the NUL 
    res[pos+len2+1] = '\0'; 
} 
puts(res); 

Это может быть сделано с меньшим количеством кода с strcat но для этого потребуется каждый звонок.

+0

Большое спасибо @Ryan. Это очень помогло. –

Смежные вопросы