#include <stdio.h>
#include <stdlib.h>
#include <string.h>
unsigned char* RemoveTrailingNulls(const unsigned char* byteArray, size_t length, size_t* newLength) {
if (byteArray == NULL || length == 0) {
*newLength = 0;
return NULL;
}
// Find the new length by iterating backward to the first non-zero element
*newLength = length;
while (*newLength > 0 && byteArray[*newLength - 1] == 0) {
(*newLength)--;
}
// Allocate memory for the trimmed array
unsigned char* trimmedArray = (unsigned char*)malloc(*newLength * sizeof(unsigned char));
if (trimmedArray == NULL) {
perror("Failed to allocate memory");
exit(1);
}
// Copy the elements to the new array
memcpy(trimmedArray, byteArray, *newLength);
return trimmedArray;
}
int main() {
unsigned char byteArray[] = {1, 2, 3, 0, 0, 0, 0};
size_t length = sizeof(byteArray) / sizeof(byteArray[0]);
// Remove trailing nulls
size_t newLength;
unsigned char* trimmedArray = RemoveTrailingNulls(byteArray, length, &newLength);
for (size_t i = 0; i < newLength; i++) {
printf("%d", trimmedArray[i]);
if (i != newLength - 1) {
printf(", ");
}
}
printf("\n");
free(trimmedArray);
return 0;
}
/*
run:
1, 2, 3
*/