Как изменить строку в список [дубликат]

Strcat присоединить строку к существующей строке. Если строковый массив пуст, он не собирается набирать конец строки ('\0'), и это вызовет ошибку времени выполнения.

Согласно странице руководства Linux простая strcat реализована следующим образом:

   char*
   strncat(char *dest, const char *src, size_t n)
   {
       size_t dest_len = strlen(dest);
       size_t i;

       for (i = 0 ; i < n && src[i] != '\0' ; i++)
           dest[dest_len + i] = src[i];
       dest[dest_len + i] = '\0';

       return dest;
   }

Как вы можете видеть в этой реализации, strlen(dest) не вернет правильную длину строки, если только dest не инициализируется, чтобы исправить значения строки c. Вам может повезти иметь массив с первым значением нуля в char stuff[100];, но вы не должны полагаться на него.

-5
задан Wen-Ben 17 January 2019 в 01:12
поделиться

3 ответа

Вот простая функция, чтобы справиться с этим, используя split и replace:

Предполагая, что 'stringlist' является вашим списком строк ...

def transformlist(stringlist):
    stringlist = stringlist.split(sep=',')
    stringlist[0] = stringlist[0].replace('[','')
    stringlist[-1] = stringlist[-1].replace(']','')
    return stringlist
0
ответ дан Marcelo Tournier 17 January 2019 в 01:12
поделиться

Вероятно, наиболее лаконичным способом является использование модуля re для разделения и удаления символов из строки, а затем рекомбинация строк обратно в структуру данных list:

import re

s = '[KEYTYPE.FWPROD2KEY, KEYTYPE.FWPROD2KEY, DOWNLOADMODE.FWTOFW, False, DEPLOYMODE.DEPLOY]'

l_str = ''.join(re.split(', [ ]', s))
l = eval(l_str)

или одно- liner:

l = eval(''.join(re.split(', [ ]', s)))

К пунктам Арьи в комментарии , так как у меня нет этих переменных, я не могу это проверить, но тогда вы сможете проверить результат типа list:

>>> print(type(l))
<type 'list'>
0
ответ дан davedwards 17 January 2019 в 01:12
поделиться

Вы можете использовать .split () , затем getattr () и ast.literal_eval ()

import ast

s = '[KEYTYPE.FWPROD2KEY, KEYTYPE.FWPROD2KEY, DOWNLOADMODE.FWTOFW, False, DEPLOYMODE.DEPLOY]'

def get_val(value):
    values = value.split('.')
    if values[0] in locals: return getattr(getattr(locals, value), values[1])
    if values[0] in globals: return getattr(getattr(globals, value), values[1])
    try: return ast.literal_eval(value)
    except: return value

#slice the string to get rid of the brackets
#and .replace to remove all spaces
data = [get_val(val) for val in s[1:-1].replace(' ', '').split(',')]

. безопасный способ сделать это.

0
ответ дан Jab 17 January 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: