我想在C中返回char *的part(或者说是substring)。关键是用户定义了我想要返回的起始索引和长度。首先,我检查给定值是否在范围内,如果不是,我想返回一个空值。
以下是我的尝试:
#include <stdio.h>
#include <stdlib.h>
char * f(char a[], int start, int len, int lenA)
{
int i, j = 1;
char *temp;
if ((start + len) > lenA)
return NULL;
if (start < 0 || len < 0)
return NULL;
else if (len == 0) {
temp = malloc(sizeof(char)*1);
return temp;
}
temp = malloc(sizeof(char)*len);
for (i = 0; len >= j; i++, j++) {
temp[i] = a[start];
start++;
}
return temp;
}
int main(void)
{
int i;
char *a = {'a', 'b', 'c'};
a = f(a, 0, 2, 3);
int size = sizeof(a) / sizeof(a[0]);
if (a != NULL) {
printf("{");
for (i = 0; i < size; i++) {
printf("'%c',", a[i]);
if (i < (size - 1))
printf(" ");
}
printf("}\n");
}
else printf("null\n");
return 0;
}
关键是当我运行它时,我收到一条错误消息:Segmentation fault (core dumped)
相反,它应该打印:{'a', 'b'}
。虽然正如你在我的主要部分中看到的那样,我用0起始索引调用了函数,并且长度为2,所以它应该得到前两个字符。任何想法,如何解决它?
答案 0 :(得分:0)
char *a = {'a', 'b', 'c'};
无效的C代码。请启用编译器警告。
如果您想使用char
数组:
char a[] = {'a', 'b', 'c'};
或对于以空字符结尾的字符串:
char a[] = "abc";
答案 1 :(得分:0)
这对我在VS Express 2013上工作。我没有查看你的所有代码。但我似乎已经解决了这个问题。 int size = sizeof(a)/ sizeof(a [0]); - 这不应该起作用。您将指针的大小(4个字节)除以字符大小(1个字节)。
#include <stdio.h>
#include <stdlib.h>
char * f(char a[], int start, int len, int lenA)
{
int i, j = 1;
char *temp;
if ((start + len) > lenA)
return NULL;
if (start < 0 || len < 0)
return NULL;
else if (len == 0) {
temp = malloc(sizeof(char)* 1);
return temp;
}
temp = malloc(sizeof(char)*len);
for (i = 0; len >= j; i++, j++) {
temp[i] = a[start];
start++;
}
return temp;
}
int main(void)
{
int i;
char arr[] = { 'a', 'b', 'c' }; //code changed here
char *a = f(arr, 0, 2, 3); //code changed here
int size = 2; //code changed here - consider using the same variable for the length above and size here
if (a != NULL) {
printf("{");
for (i = 0; i < size; i++) {
printf("%c,", a[i]);
if (i < (size - 1))
printf(" ");
}
printf("}\n");
}
else printf("null\n");
system("PAUSE");
return 0;
}
如果您需要更多帮助,请与我们联系。我并没有对所有情况进行测试。另外,不要忘记释放动态分配的内存。