Android 从资源中读取文本文件时的奇怪行为

Android 从资源中读取文本文件时的奇怪行为,android,c++,c,android-ndk,Android,C++,C,Android Ndk,我目前正在使用本机活动工具和GLE2.0,并使用ndk从资产中加载GLE的着色器 这是简单着色器的来源: 顶点着色器:simple.vsh attribute vec4 vPosition; void main() { gl_Position = vPosition; } 片段着色器:simple.fsh precision mediump float; void main() { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); } 这是我用

我目前正在使用本机活动工具和GLE2.0,并使用ndk从资产中加载GLE的着色器

这是简单着色器的来源:

顶点着色器:simple.vsh

attribute vec4 vPosition;
void main()
{
    gl_Position = vPosition;
}
片段着色器:simple.fsh

precision mediump float;
void main()
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
这是我用来加载着色器文件的代码

AAsset *shaderAsset= AAssetManager_open(app->activity->assetManager, path, AASSET_MODE_BUFFER);
size_t length = AAsset_getLength(shaderAsset);

LOGI("Shader source size: %d\n", length);


char* buffer = (char*) malloc(length);

AAsset_read(shaderAsset, buffer, length);   

LOGI("Shader source : %s\n", buffer);

AAsset_close(shaderAsset);
free(buffer);
当我运行应用程序时,我在android logcat中看到:

 Shader source size: 71
 07-22 13:23:52.683 11135 11146 I native-activity: Shader source : attribute vec4 vPosition;
 07-22 13:23:52.683 11135 11146 I native-activity: void main()
 07-22 13:23:52.683 11135 11146 I native-activity: {
 07-22 13:23:52.683 11135 11146 I native-activity:     gl_Position = vPosition;
 07-22 13:23:52.683 11135 11146 I native-activity: }
 07-22 13:23:52.683 11135 11146 I native-activity: sP
 07-22 13:23:52.683 11135 11146 I native-activity: Shader source size: 86
 07-22 13:23:52.683 11135 11146 I native-activity: Shader source : precision mediump float;
 07-22 13:23:52.683 11135 11146 I native-activity: void main()
 07-22 13:23:52.683 11135 11146 I native-activity: {
 07-22 13:23:52.683 11135 11146 I native-activity:     gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
 07-22 13:23:52.683 11135 11146 I native-activity: }
 07-22 13:23:52.683 11135 11146 I native-activity: fs`
注意文件末尾的“sP”和“fs”

我还为构建xml文件中的文件扩展名添加了“nocompression”,以防出现问题,但问题仍然存在


有人知道这可能是什么原因吗?

不知为什么尾随的零没有进入资产

试用

// one extra char for the trailing zero
char* buffer = (char*) malloc(length + 1);

AAsset_read(shaderAsset, buffer, length);   

// fix the string to be zero-terminated
buffer[length] = 0;

谢谢你。这就解决了问题。但这仍然困扰着我为什么?我在我的机器上使用zip实用程序打开了apk,我注意到文件的末尾有一个额外的新行。我真的不知道,在这种情况下,我更喜欢快速解决方法:)也许他们会将文件大小调整到4的倍数或128字节(你的小字节)