所以我有一個程式,我有用戶輸入的字串(一個字符陣列),我需要使用記憶體分配的指向字符陣列的指標將所有奇數索引元素復制到另一個陣列。
(charPointer 需要分配給使用 malloc 所需的確切空間量)
char charArray[16];
printf("Enter string: ");
scanf("s", charArray);
char *charPointer = malloc((sizeof(charArray) / 2 ));
char *d = charPointer;
for (char *p = charArray; *p != '\0'; p ) {
// Calculates odd-index element using bit operator
if ((p - charArray) % 2 != 0){
// Shows which elements should be copied
printf("%c", *p);
// Copy *p value to charPointer
charPointer[p-charArray] = *p;
charPointer ;
}
}
while(*d != '\0')
printf("%c\n",*d );
但是我得到了奇怪的結果,比如 charPointer 它只復制第一個奇數索引而不是其余的。我以為我理解了指標,但這確實讓我感到困惑。我感謝任何幫助!
uj5u.com熱心網友回復:
首先這個電話
scanf("s", charArray);
^^^^
是不正確的。你需要寫
scanf("s", charArray);
^^^^
這個記憶體分配
char *charPointer = malloc((sizeof(charArray) / 2 ));
分配冗余記憶體。你應該寫
char *charPointer = malloc( strlen(charArray) / 2 1 );
這些宣告
charPointer[p-charArray] = *p;
charPointer ;
沒有意義,因為它們不會在動態指向的字符陣列中按順序寫入字符。你至少應該這樣寫
*charPointer = *p;
由于終止零字符 '\0' 未附加到動態分配的陣列中,因此此 while 回圈
while(*d != '\0')
printf("%c\n",*d );
呼叫未定義的行為。
你也應該釋放分配的記憶體。
這是一個演示程式。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
char charArray[16];
printf( "Enter a string: " );
scanf( "s", charArray );
char *charPointer = malloc( strlen( charArray ) / 2 1 );
char *q = charPointer;
for ( const char *p = charArray; *p != '\0'; p )
{
if ( ( p - charArray ) % 2 != 0 )
{
*q = *p;
}
}
*q = '\0';
puts( charPointer );
free( charPointer );
return 0;
}
程式輸出可能看起來像
Enter a string: 012345678901234
1357913
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/315004.html
下一篇:選擇排序中動態陣列和指標的問題
