Are you writing C or C++? There is no language called C/C++ and the answer to your question differs depending on the language you are using. If you are using C++, you should use std::string rather than plain old C strings.
There is a major problem in your code which I did not see other posters address:
entity* aEntity;
declares aEntity (should be anEntity) as a pointer to an entity but it is not initialized. Therefore, like all uninitialized pointers, it points to garbage. Hence:
aEntity->attr = attributes;
invokes undefined behavior.
Now, given a properly initialized anEntity, anEntity->fileName is an array, not a pointer to a character array (see question 6.2 in the C FAQ list). As such, you need to copy over the character string pointed to by fileNameDir to the memory block reserved for anEntity->fileName.
I see a lot of recommendations to use strncpy. I am not a proponent of thinking of strncpy as a safer replacement for strcpy because it really isn't. See also Why is strncpy insecure?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct st_entity {
    unsigned long attr;
    char fileName[FILENAME_MAX + 1];
} entity;
int main(void) {
    int status = EXIT_FAILURE;
    unsigned long attribute = 100;
    char *fileNameDir = "blabla....etc";
    entity *anEntity = malloc(sizeof(*anEntity));
    if ( anEntity ) {
        anEntity->attr = attribute;
        anEntity->fileName[0] = '\0';
        strncat(anEntity->fileName, fileNameDir, sizeof(anEntity->fileName) - 1);
        printf("%lu\n%s\n", anEntity->attr, anEntity->fileName);
        status = EXIT_SUCCESS;
    }
    else {
        fputs("Memory allocation failed", stderr);
    }
    return status;
}
See strncat.