0

nsdata から char* にバイトを取得しようとしていますが、char* の長さが nsdata の長さを超えており、最後に余分なジャンク文字が追加されています。コード:

 NSData * newData=[self dataFromHexString:trimmedHex];
 NSLog(@"new data length %d",[newData length]);
 char * ciphertext=(char*)[newData bytes];
 NSLog(@"length of ciphertext %zd",strlen(ciphertext));

ログ:

2013-08-02 17:02:28.175 AES[4187:11303] new data length 128
2013-08-02 17:02:28.176 AES[4187:11303] length of ciphertext 144

朝からこれで立ち往生。:(

const char * ciphertextTemp=(const char*)[newData bytes];
char ciphertext[[newData length]+1];
for (int len=0; len<[self length];len++) {
    ciphertext[len]=ciphertextTemp[len];
}
ciphertext[[self length]]='\0';
4

1 に答える 1

1

sが指して0いるシーケンスにターミネータがありませんか?charciphertext


アップデート:

それ以外の

for (int len=0; len<[self length];len++) {
  ciphertext[len]=ciphertextTemp[len];
}
ciphertext[[self length]]='\0';

あなたは簡単に行うことができます:

strncpy(ciphertext, ciphertextTemp, [newData length]);
ciphertext[[self length] - 1]='\0';
于 2013-08-02T12:40:49.493 に答える