该程序可以正常分配和重新分配数据。
如果c == -1我想破解,所以我试图将c与“ - ”和数据[i-1] =='1'进行比较,但是我得到了一个错误。所以我试着打印它以查看出现的情况。
for (i=0;;i++) {
c=getchar(); /* put input character into c */
if (c== '1' ) { // need to find a way to change it to -1
printf("n-1 is %c",data[i]); // ask
break;
//&& (data[i-1] == '-')
}
输出
n-1 is ?
*?颠倒了
任何想法。谢谢。
修改
char *getInput()
{
char *data,*temp;
data= malloc(sizeof(char));
char c; /* c is the current character */
int i; /* i is the counter */
printf ("\n Enter chars and to finish push new line:\n");
for (i=0;;i++) {
c=getchar(); /* put input character into c */
if (c== '1' ) { // need to find a way to change it to -1
printf("n-1 is %c",data[i]); // ask
break;
//&& (data[i-1] == '-')
}
data[i]=c; /* put the character into the data array */
temp= realloc(data,(i+1)*sizeof(char)); /* give the pointer some memory */
if ( temp != NULL ) {
data=temp;
} else {
free(data);
printf("Error allocating memory!\n");
return 0 ;
}
}
答案 0 :(得分:1)
如果我理解正确,你想在输入循环中测试特定输入“-1”。然后,您需要测试两个字符,而不仅仅是1.为了防止数据欠载,首先测试i > 0
- 如果您立即按1
,您仍然处于位置# 0,所以你在实际字符串之前测试一些随机内存:
if (i > 0 && c== '1' && data[i-1] == '-')
{
data[i-1] = 0; /* Terminate string at correct position */
break;
}
不要忘记调整提示。
元问题:为什么使用'-1'来终止输入,因为Enter是一个更合乎逻辑的选择?
答案 1 :(得分:0)
您之前没有启动数据[]。并且在执行期间,如果第一个输入用户给出的是'1',那么它需要输出一些垃圾。这就是垃圾,倒是'?'
答案 2 :(得分:0)
执行printf时,您没有为data [i]分配任何char。使用以下代码
if (c== '1' && i>0 ) {
printf("n-1 is %c",data[i-1]);
break;
}
而不是
if (c== '1' ) { // need to find a way to change it to -1
printf("n-1 is %c",data[i]); // ask
break;
//&& (data[i-1] == '-')
}