Вы не можете сделать b=(char*)s
!!!
Компилятор позволяет вам использовать этот, но вы получите исключение во время выполнения, как только вы попытаетесь записать в адресное пространство памяти, указанное b
.
Переменная s
является возможно указует на адрес в кодовой секции, которая является только для чтения адресного пространства памяти в вашей программе («возможно», потому что, возможно, что const
декларация s
это вы добавили только что-то по собственной инициативе).
Вы должны выделить новый массив char
и вместо этого скопировать выходную строку в этот массив.
В первую очередь измените приведенный выше оператор на b = (char*)malloc(strlen(s))
.
Кроме того, не переходите на strncpy
(или любую другую функцию str
) на адрес переменной char
. Эти функции работают с массивами char
и либо предполагают, что массив заканчивается символом 0, либо задают символ в конце массива равным 0.
Вы можете попробовать следующий фрагмент кода (при условии, что ваша цель чтобы удалить '"'
):
const char* s = sheet->readStr(row, col);
int ii = strlen(s);
char* b = (char*)malloc(ii+1);
if (b != NULL)
{
int i,j;
for(i=0,j=0; i<ii; i++)
{
if (s[i] != '"')
b[j++] = s[i];
}
b[j] = 0;
// Add your code here (do whatever you wanna do with 'b')
free(b);
}
else
{
printf("Out of memory\n");
}
Вы можете уточнить свой вопрос? – Dave
От чего страдает ваш код? – Maroun
Что именно вы пытаетесь сделать? – phoeagon