我正在尝试传递一个char *并在另一个函数中更改它,但不知何故它不断给出seg错误。
完整代码是:
#include <stdio.h>
void getString(char** str) {
*str[0] = '$';
char c;
int i = 1;
while ((c = getchar()) != '$') {
if (c != '\n') {
*str[i-1] = c;
i++;
}
}
*str[i] = '\0';
}
int main (int argc, char *argv[]) {
char* str = (char*)malloc(200 * sizeof(char));
while (1) {
getString(&str);
printf("String: %s\n",str);
}
return 0;
}
如果我从str [0] ='$'取*,它会发出一个警告,将指针传递给整数。
Dunno,我搞砸了。
答案 0 :(得分:4)
数组索引[],运算符的优先级低于解除引用运算符*
因此,您必须更改代码
(*str)[0] = '$';
(*str)[i-1] = c;
(*str)[i] = '\0';
在你的情况下,你不需要传入指针的地址,只需传递指针:
getString(str);
并将其作为
访问str[0] = '$';
str[i-1] = c;
str[i] = '\0';
由于您正在使用malloc(),请务必添加#include <stdlib.h>
如果你没有强制转换malloc的返回值,那么C中就不需要了
对此发出了警告。
答案 1 :(得分:0)
您想要更改现有缓冲区的内容而不是创建然后返回新缓冲区,以便您可以将char*
传递给getString
而不是
#include <stdio.h>
void getString(char* str) {
str[0] = '$';
char c;
int i = 1;
while ((c = getchar()) != '$') {
if (c != '\n') {
str[i-1] = c;
i++;
}
}
str[i] = '\0';
}
int main (int argc, char *argv[]) {
char* str = malloc(200);
while (1) {
getString(str);
printf("String: %s\n",str);
}
return 0;
}
请注意,我还对内存分配进行了一些更改。 sizeof(char)
保证为1,因此可以省略,您无需在C中转换malloc
的返回值。