这是我的代码:
#include <stdio.h>
#include <stdlib.h>
void getinfo(unsigned int a, unsigned int b, char **s);
int main(){
unsigned int len_max = 8;
unsigned int current_size = 0;
char *pStr = malloc(len_max);
if(pStr == NULL){
perror("\nMemory allocation\n");
return EXIT_FAILURE;
}
current_size = len_max;
printf("Inserisci hostname: ");
getinfo(len_max, current_size, &pStr);
printf("\nLa stringa inserita è: %s\n", pStr);
free(pStr);
return EXIT_SUCCESS;
}
void getinfo(unsigned int a, unsigned int b, char **pStr){
unsigned int i = 0;
char c = EOF;
while((c = getchar()) != '\n'){
*pStr[i++] = (char)c;
if(i == b){
b = i+a;
if((*pStr = realloc(*pStr, b)) == NULL){
perror("\nMemory allocation error\n");
exit(EXIT_FAILURE);
}
}
}
*pStr[i]='\0';
}
当我执行此代码时,当我按下Enter键(在我写完字符串之后)时,我遇到了分段错误 我确定问题出在函数中(可能问题是* s指针)但我不知道如何纠正它...
答案 0 :(得分:3)
您有优先权问题。你需要使用
(*s)[i++] = ...
而不是
*s[i++] = ...
同样你需要
(*s)[i]='\0';
当您撰写*s[i]
时,您正在为s
编制索引。但是你想索引*s
,因此需要括号。
我没有检查过你的其余代码,但我希望这可以帮助你调试剩下的代码,如果确实有更多的错误。
答案 1 :(得分:1)
问题在于*s[i++] = (char)c;
尝试将其转换为(*s)[i++] = (char)c;
,并在* s周围加上括号。以及(*s)[i] = '\0'
。